From: <pal...@us...> - 2005-01-13 01:55:45
|
Update of /cvsroot/gc-linux/linux/drivers/exi In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31027/drivers/exi Modified Files: exi-bus.c exi-hw.c exi_priv.h Log Message: Fixed Fatal ARAM bug when audio+aram might reset each others interrupt handling. Various other fixes Index: exi-bus.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-bus.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exi-bus.c 8 Jan 2005 22:46:47 -0000 1.1 +++ exi-bus.c 13 Jan 2005 01:55:32 -0000 1.2 @@ -132,6 +132,10 @@ return 0; } +static void exi_release(struct device *dev) +{ +} + static void exi_bus_scan(void) { unsigned int channel; @@ -160,10 +164,11 @@ exi_devices[channel][device].dev.bus = &exi_bus_type; exi_devices[channel][device].dev.platform_data = &exi_data[channel]; + exi_devices[channel][device].dev.release = exi_release; /* now ID the device */ exi_devices[channel][device].eid.id = exi_synchronous_id(channel,device); - if (exi_devices[channel][device].eid.id != EXI_INVALID_ID) { + if (exi_devices[channel][device].eid.id != EXI_INVALID_ID || ((device == 0) && (readl(EXI_CSR(channel)) & EXI_CSR_EXT))) { printk(KERN_INFO "%s:%s: %x\n", exi_parent[channel].bus_id, exi_devices[channel][device].dev.bus_id, @@ -177,27 +182,22 @@ void exi_bus_insert(unsigned int channel,unsigned int bInsert) { - /* - this is all wrong, just skip this function, no hot-plug support - for now - */ - /*u32 device; - u32 id; - - if (bInsert) - { - for (device=0;device<EXI_DEVICES_PER_CHANNEL;++device) { - id = exi_synchronous_id(channel,device); - if (id != EXI_INVALID_ID) { - device_register(&exi_devices[channel][device].dev); - } - } + u32 device; + /* channel 2 is really the BBA */ + if (channel == 2) { + channel = 0; + device = 2; } else { - device_register(&exi_devices[channel][0].dev); - device_register(&exi_devices[channel][1].dev); - device_register(&exi_devices[channel][2].dev); - }*/ + device = 0; + } + + if (bInsert) { + device_register(&exi_devices[channel][device].dev); + } + else { + device_unregister(&exi_devices[channel][device].dev); + } } static int __init exi_init(void) Index: exi-hw.c =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi-hw.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exi-hw.c 8 Jan 2005 22:46:47 -0000 1.1 +++ exi-hw.c 13 Jan 2005 01:55:32 -0000 1.2 @@ -140,7 +140,7 @@ u32 val; /* flush the cache when writing */ if (subcmd->flags & EXI_CMD_WRITE) { - flush_dcache_range((u32)subcmd->data, + clean_dcache_range((u32)subcmd->data, (u32)subcmd->data + subcmd->len); } /* convert to physical */ Index: exi_priv.h =================================================================== RCS file: /cvsroot/gc-linux/linux/drivers/exi/exi_priv.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- exi_priv.h 8 Jan 2005 22:46:47 -0000 1.1 +++ exi_priv.h 13 Jan 2005 01:55:32 -0000 1.2 @@ -42,8 +42,6 @@ #define EXI_MAX_CHANNELS 3 #define EXI_DEVICES_PER_CHANNEL 3 -#define EXI_INVALID_ID 0xFFFFFFFF - #define EXI_READ 0 #define EXI_WRITE 1 #define EXI_CSR_BASE (void* __iomem)0xCC006800 |