Changeset 12454


Ignore:
Timestamp:
2008-09-01T13:49:57+02:00 (8 years ago)
Author:
florian
Message:

Fix divisor calculation and configuration from previous commit, thanks sn9

Location:
trunk/target/linux/ar7
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ar7/files/arch/mips/ar7/platform.c

    r10709 r12454  
    494494                return res; 
    495495 
     496        ar7_device_disable(vlynq_low_data.reset_bit); 
    496497        res = platform_device_register(&vlynq_low); 
    497498        if (res) 
    498499                return res; 
    499500 
    500         ar7_device_disable(vlynq_low_data.reset_bit); 
    501501        if (ar7_has_high_vlynq()) { 
    502502                ar7_device_disable(vlynq_high_data.reset_bit); 
  • trunk/target/linux/ar7/files/arch/mips/ar7/prom.c

    r10708 r12454  
    4040static struct env_var adam2_env[MAX_ENTRY] = { { 0, }, }; 
    4141 
    42 char *prom_getenv(char *name) 
     42char *prom_getenv(const char *name) 
    4343{ 
    4444        int i; 
     
    289289 
    290290/* from adm5120/prom.c */ 
    291 void prom_printf(char *fmt, ...) 
     291void prom_printf(const char *fmt, ...) 
    292292{ 
    293293        va_list args; 
  • trunk/target/linux/ar7/files/drivers/vlynq/vlynq.c

    r12443 r12454  
    2727#include <linux/interrupt.h> 
    2828#include <linux/device.h> 
     29#include <linux/delay.h> 
    2930#include <linux/io.h> 
    3031 
     
    302303        struct vlynq_device *vdev = to_vlynq_device(dev); 
    303304        struct vlynq_driver *vdrv = to_vlynq_driver(drv); 
    304         struct plat_vlynq_ops *ops = dev->platform_data; 
    305305        struct vlynq_device_id *ids = vdrv->id_table; 
    306         u32 id = 0; 
    307         int result, flag; 
    308306 
    309307        while (ids->id) { 
    310                 flag = 0; 
    311                 if (ids->divisor != vlynq_div_auto 
    312                                 && vdev->divisor == vlynq_div_auto) { 
    313                         flag = 1; 
     308                if (ids->id == vdev->dev_id) { 
    314309                        vdev->divisor = ids->divisor; 
    315                         result = __vlynq_enable_device(vdev); 
    316                         if (result == 0) { 
    317                                 id = vlynq_reg_read(vdev->remote->chip); 
    318                                 vlynq_reg_write(vdev->local->control, 0); 
    319                                 vlynq_reg_write(vdev->remote->control, 0); 
    320                                 ops->off(vdev); 
    321                         } else 
    322                                 id = vdev->dev_id; 
    323                 } else 
    324                         id = vdev->dev_id; 
    325                 if (ids->id == id) { 
    326                         vdev->dev_id = id; 
    327310                        vlynq_set_drvdata(vdev, ids); 
    328311                        printk(KERN_INFO "Driver found for VLYNQ " \ 
    329                                 "device: %08x\n", id); 
     312                                "device: %08x\n", vdev->dev_id); 
    330313                        return 1; 
    331314                } 
    332                 printk(KERN_INFO "Not using the %08x VLYNQ device's " \ 
    333                         "driver for VLYNQ device: %08x\n", ids->id, id); 
     315                printk(KERN_DEBUG "Not using the %08x VLYNQ device's driver" \ 
     316                        " for VLYNQ device: %08x\n", ids->id, vdev->dev_id); 
    334317                ids++; 
    335                 if (flag) 
    336                         vdev->divisor = vlynq_div_auto; 
    337318        } 
    338319        return 0; 
     
    386367                return result; 
    387368 
    388         vlynq_reg_write(dev->local->control, 0); 
    389         vlynq_reg_write(dev->remote->control, 0); 
    390         if (vlynq_linked(dev)) { 
    391                 printk(KERN_DEBUG "%s: using external clock\n", 
    392                         dev->dev.bus_id); 
    393                 return 0; 
    394         } 
    395  
    396369        switch (dev->divisor) { 
    397370        case vlynq_div_auto: 
     
    399372                vlynq_reg_write(dev->local->control, 0); 
    400373                vlynq_reg_write(dev->remote->control, 0); 
    401                 for (i = vlynq_ldiv2; i <= vlynq_ldiv8; i++) { 
     374                if (vlynq_linked(dev)) { 
     375                        dev->divisor = vlynq_div_external; 
     376                        printk(KERN_DEBUG "%s: using external clock\n", 
     377                                dev->dev.bus_id); 
     378                        return 0; 
     379                } 
     380                for (i = dev->dev_id ? vlynq_ldiv2 : vlynq_ldiv8; dev->dev_id ? 
     381                                i <= vlynq_ldiv8 : i >= vlynq_ldiv2; 
     382                                dev->dev_id ? i++ : i--) { 
    402383                        vlynq_reg_write(dev->local->control, 
    403384                                        VLYNQ_CTRL_CLOCK_INT | 
     
    619600               (void *)dev->mem_start); 
    620601 
     602        dev->dev_id = 0; 
    621603        dev->divisor = vlynq_div_auto; 
    622604        result = __vlynq_enable_device(dev); 
    623605        if (result == 0) { 
    624606                dev->dev_id = vlynq_reg_read(dev->remote->chip); 
    625                 vlynq_reg_write(dev->local->control, 0); 
    626                 vlynq_reg_write(dev->remote->control, 0); 
    627607                ((struct plat_vlynq_ops *)(dev->dev.platform_data))->off(dev); 
    628         } else 
    629                 dev->dev_id = 0; 
     608        } 
    630609        if (dev->dev_id) 
    631610                printk(KERN_INFO "Found a VLYNQ device: %08x\n", dev->dev_id); 
  • trunk/target/linux/ar7/files/include/asm-mips/ar7/prom.h

    r10708 r12454  
    2020#define __PROM_H__ 
    2121 
    22 extern char *prom_getenv(char *name); 
    23 extern void prom_printf(char *fmt, ...); 
     22extern char *prom_getenv(const char *name); 
     23extern void prom_printf(const char *fmt, ...) __attribute__((format(printf, 1, 2))); 
    2424extern void prom_meminit(void); 
    2525 
  • trunk/target/linux/ar7/patches-2.6.26/100-board_support.patch

    r11824 r12454  
    11--- a/arch/mips/Kconfig 
    22+++ b/arch/mips/Kconfig 
    3 @@ -18,6 +18,24 @@ 
     3@@ -18,6 +18,23 @@ 
    44        prompt "System type" 
    55        default SGI_IP22 
     
    1212+       select CSRC_R4K 
    1313+       select IRQ_CPU 
    14 +       select NO_EXCEPT_FILL 
    1514+       select SWAP_IO_SPACE 
    1615+       select SYS_HAS_CPU_MIPS32_R1 
Note: See TracChangeset for help on using the changeset viewer.