Author: blogic
Date: 2016-01-03 19:03:17 +0100 (Sun, 03 Jan 2016)
New Revision: 48096

Modified:
   
branches/chaos_calmer/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3052.c
Log:
ramips: Get rt3052 ethernet ports to be disabled from the device tree.

This patch allows configuring ports to be disabled in the device tree; this
saves power, since disabling ports here actually disables power to ethernet
PHYs.

Line 461 enables all ethernet ports, so line 508 is getting zero ports to be
disabled, except for port 5 in SoCs where this is not implemented as it will
be sticky disabled in register POC0. Because of this, the code will still read
the switch configuration and OR it to the device tree setting.

Signed-off-by: Vittorio Gambaletta <[email protected]>

Modified: 
branches/chaos_calmer/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3052.c
===================================================================
--- 
branches/chaos_calmer/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3052.c
    2016-01-03 18:03:07 UTC (rev 48095)
+++ 
branches/chaos_calmer/target/linux/ramips/files/drivers/net/ethernet/ralink/esw_rt3052.c
    2016-01-03 18:03:17 UTC (rev 48096)
@@ -233,6 +233,7 @@
        spinlock_t              reg_rw_lock;
 
        unsigned char           port_map;
+       unsigned char           port_disable;
        unsigned int            reg_initval_fct2;
        unsigned int            reg_initval_fpa2;
        unsigned int            reg_led_polarity;
@@ -504,8 +505,14 @@
        esw_w32(esw, 0x00000005, RT305X_ESW_REG_P3LED);
        esw_w32(esw, 0x00000005, RT305X_ESW_REG_P4LED);
 
-       /* Copy disabled port configuration from bootloader setup */
-       port_disable = esw_get_port_disable(esw);
+       /* Copy disabled port configuration from device tree setup */
+       port_disable = esw->port_disable;
+
+       /* Disable nonexistent ports by reading the switch config
+        * after having enabled all possible ports above
+        */
+       port_disable |= esw_get_port_disable(esw);
+
        for (i = 0; i < 6; i++)
                esw->ports[i].disable = (port_disable & (1 << i)) != 0;
 
@@ -1373,7 +1380,7 @@
 {
        struct device_node *np = pdev->dev.of_node;
        const struct rt305x_esw_platform_data *pdata;
-       const __be32 *port_map, *reg_init;
+       const __be32 *port_map, *port_disable, *reg_init;
        struct rt305x_esw *esw;
        struct switch_dev *swdev;
        struct resource *res, *irq;
@@ -1420,6 +1427,10 @@
        if (port_map)
                esw->port_map = be32_to_cpu(*port_map);
 
+       port_disable = of_get_property(np, "ralink,portdisable", NULL);
+       if (port_disable)
+               esw->port_disable = be32_to_cpu(*port_disable);
+
        reg_init = of_get_property(np, "ralink,fct2", NULL);
        if (reg_init)
                esw->reg_initval_fct2 = be32_to_cpu(*reg_init);
_______________________________________________
openwrt-commits mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-commits

Reply via email to