Changeset 24178


Ignore:
Timestamp:
2010-11-28T19:03:42+01:00 (6 years ago)
Author:
florian
Message:

[ar7] refresh and refine vlynq patch, patch from sn9

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar7/patches-2.6.32/160-vlynq_try_remote_first.patch

    r24139 r24178  
    11Index: linux-2.6.32.26/drivers/vlynq/vlynq.c 
    22=================================================================== 
    3 --- linux-2.6.32.26.orig/drivers/vlynq/vlynq.c  2010-11-24 13:01:20.459985351 -0800 
    4 +++ linux-2.6.32.26/drivers/vlynq/vlynq.c       2010-11-24 13:01:43.537494084 -0800 
     3--- linux-2.6.32.26.orig/drivers/vlynq/vlynq.c  2010-11-22 10:48:20.000000000 -0800 
     4+++ linux-2.6.32.26/drivers/vlynq/vlynq.c       2010-11-28 02:56:51.972405343 -0800 
    55@@ -103,6 +103,12 @@ 
    66 } 
     
    1616 static int vlynq_linked(struct vlynq_device *dev) 
    1717 { 
    18 @@ -117,20 +123,43 @@ 
     18@@ -117,20 +123,40 @@ 
    1919        return 0; 
    2020 } 
     
    3939+       u32 rtm = readl(&dev->local->revision); 
    4040+ 
    41 +       if (rtm < 0x00010200) 
    42 +               return; 
    43 + 
    4441+       rtm = rtm < 0x00010205 || readl(&dev->local->status) & 0x800 == 0 ? 
    4542+                       0 : 0x600000; 
     
    6360  
    6461 static void vlynq_irq_unmask(unsigned int irq) 
    65 @@ -379,6 +408,62 @@ 
     62@@ -379,6 +405,61 @@ 
    6663 } 
    6764 EXPORT_SYMBOL(vlynq_unregister_driver); 
     
    8582+               return -EINVAL; 
    8683+       } 
    87 + 
    88 +       printk(KERN_INFO "%s: local VLYNQ protocol rev. is 0x%08x\n", 
    89 +                       dev_name(&dev->dev), readl(&dev->local->revision)); 
    9084+ 
    9185+       reg = readl(&dev->local->control); 
     
    10397+               return -ENODEV; 
    10498+ 
     99+       printk(KERN_INFO "%s: local VLYNQ protocol rev. is 0x%08x\n", 
     100+                       dev_name(&dev->dev), readl(&dev->local->revision)); 
    105101+       printk(KERN_INFO "%s: remote VLYNQ protocol rev. is 0x%08x\n", 
    106102+                       dev_name(&dev->dev), readl(&dev->remote->revision)); 
     
    126122  * A VLYNQ remote device can clock the VLYNQ bus master 
    127123  * using a dedicated clock line. In that case, both the 
    128 @@ -392,29 +477,15 @@ 
     124@@ -392,29 +473,17 @@ 
    129125        int i; 
    130126  
     
    133129-                       i <= vlynq_rdiv8 : i >= vlynq_rdiv2; 
    134130-               dev->dev_id ? i++ : i--) { 
    135 - 
    136 +       for (i = 0; i <= 7; i++) { 
     131+       for (i = dev->dev_id ? 0 : 7; dev->dev_id ? i <= 7 : i >= 0; 
     132+                       dev->dev_id ? i++ : i--) { 
     133  
    137134                if (!vlynq_linked(dev)) 
    138135                        break; 
     
    150147- 
    151148-               if (vlynq_linked(dev)) { 
    152 +               if (!__vlynq_set_clocks(dev, vlynq_clk_remote, i, i)) { 
    153                         printk(KERN_DEBUG 
     149-                       printk(KERN_DEBUG 
    154150-                               "%s: using remote clock divisor %d\n", 
    155151-                               dev_name(&dev->dev), i - vlynq_rdiv1 + 1); 
    156152-                       dev->divisor = i; 
     153+               if (!__vlynq_set_clocks(dev, vlynq_clk_remote, i, i)) { 
     154+                       printk(KERN_INFO 
    157155+                                       "%s: using remote clock divisor %d\n", 
    158156+                                       dev_name(&dev->dev), i + 1); 
     
    161159                } else { 
    162160                        vlynq_reset(dev); 
    163 @@ -437,21 +508,12 @@ 
     161@@ -437,21 +506,14 @@ 
    164162  
    165163        vlynq_reset(dev); 
     
    176174- 
    177175-               if (vlynq_linked(dev)) { 
    178 +       for (i = 0; i <= 7; i++) { 
    179 +               if (!__vlynq_set_clocks(dev, vlynq_clk_local, i, 0)) { 
    180                         printk(KERN_DEBUG 
     176-                       printk(KERN_DEBUG 
    181177-                               "%s: using local clock divisor %d\n", 
    182178-                               dev_name(&dev->dev), i - vlynq_ldiv1 + 1); 
    183179-                       dev->divisor = i; 
     180+       for (i = dev->dev_id ? 0 : 7; dev->dev_id ? i <= 7 : i >= 0; 
     181+                       dev->dev_id ? i++ : i--) { 
     182+ 
     183+               if (!__vlynq_set_clocks(dev, vlynq_clk_local, i, 0)) { 
     184+                       printk(KERN_INFO 
    184185+                                       "%s: using local clock divisor %d\n", 
    185186+                                       dev_name(&dev->dev), i + 1); 
     
    201202- 
    202203-       if (vlynq_linked(dev)) { 
    203 +       if (!__vlynq_set_clocks(dev, vlynq_clk_external, 0, 0)) { 
    204                 printk(KERN_DEBUG "%s: using external clock\n", 
     204-               printk(KERN_DEBUG "%s: using external clock\n", 
    205205-                       dev_name(&dev->dev)); 
    206206-                       dev->divisor = vlynq_div_external; 
     207+       if (!__vlynq_set_clocks(dev, vlynq_clk_external, 0, 0)) { 
     208+               printk(KERN_INFO "%s: using external clock\n", 
    207209+                               dev_name(&dev->dev)); 
    208210+                               dev->divisor = vlynq_div_external; 
     
    241243-               writel(0, &dev->remote->control); 
    242244-               if (vlynq_linked(dev)) { 
    243 +               if (!__vlynq_set_clocks(dev, vlynq_clk_local, dev->divisor - 
    244 +                               vlynq_ldiv1, 0)) { 
    245                         printk(KERN_DEBUG 
     245-                       printk(KERN_DEBUG 
    246246-                               "%s: using local clock divisor %d\n", 
    247247-                               dev_name(&dev->dev), 
    248248-                               dev->divisor - vlynq_ldiv1 + 1); 
     249+               if (!__vlynq_set_clocks(dev, vlynq_clk_local, dev->divisor - 
     250+                               vlynq_ldiv1, 0)) { 
     251+                       printk(KERN_INFO 
    249252+                                       "%s: using local clock divisor %d\n", 
    250253+                                       dev_name(&dev->dev), 
     
    262265-                       vlynq_rdiv1), &dev->remote->control); 
    263266-               if (vlynq_linked(dev)) { 
    264 +               if (!__vlynq_set_clocks(dev, vlynq_clk_remote, 0, 
    265 +                               dev->divisor - vlynq_rdiv1)) { 
    266                         printk(KERN_DEBUG 
     267-                       printk(KERN_DEBUG 
    267268-                               "%s: using remote clock divisor %d\n", 
    268269-                               dev_name(&dev->dev), 
    269270-                               dev->divisor - vlynq_rdiv1 + 1); 
     271+               if (!__vlynq_set_clocks(dev, vlynq_clk_remote, 0, 
     272+                               dev->divisor - vlynq_rdiv1)) { 
     273+                       printk(KERN_INFO 
    270274+                                       "%s: using remote clock divisor %d\n", 
    271275+                                       dev_name(&dev->dev), 
     
    274278                } 
    275279                break; 
    276 @@ -732,13 +771,13 @@ 
     280@@ -732,13 +771,12 @@ 
    277281        platform_set_drvdata(pdev, dev); 
    278282  
     
    283287+                       dev->irq, (void *)dev->mem_start); 
    284288  
    285 -       dev->dev_id = 0; 
     289        dev->dev_id = 0; 
    286290        dev->divisor = vlynq_div_auto; 
    287291-       result = __vlynq_enable_device(dev); 
    288292-       if (result == 0) { 
    289 +       if (__vlynq_enable_device(dev)) 
    290 +               dev->dev_id = 0; 
    291 +       else { 
     293+       if (!__vlynq_enable_device(dev)) { 
    292294                dev->dev_id = readl(&dev->remote->chip); 
    293295                ((struct plat_vlynq_ops *)(dev->dev.platform_data))->off(dev); 
     
    295297Index: linux-2.6.32.26/include/linux/vlynq.h 
    296298=================================================================== 
    297 --- linux-2.6.32.26.orig/include/linux/vlynq.h  2010-11-24 13:07:33.297487888 -0800 
    298 +++ linux-2.6.32.26/include/linux/vlynq.h       2010-11-24 13:08:44.107488596 -0800 
     299--- linux-2.6.32.26.orig/include/linux/vlynq.h  2010-11-22 10:48:20.000000000 -0800 
     300+++ linux-2.6.32.26/include/linux/vlynq.h       2010-11-27 12:08:39.312438011 -0800 
    299301@@ -98,6 +98,7 @@ 
    300302  
Note: See TracChangeset for help on using the changeset viewer.