Index: asic3_base.c =================================================================== RCS file: /cvs/linux/kernel26/drivers/soc/asic3_base.c,v retrieving revision 1.21 diff -u -r1.21 asic3_base.c --- asic3_base.c 19 Nov 2006 23:08:17 -0000 1.21 +++ asic3_base.c 30 Nov 2006 17:34:51 -0000 @@ -49,29 +49,29 @@ static spinlock_t asic3_gpio_lock; -static int asic3_remove (struct device *dev); +static int asic3_remove (struct platform_device *pdev); static inline unsigned long -asic3_address (struct device *dev, unsigned int reg) +asic3_address (struct platform_device *pdev, unsigned int reg) { struct asic3_data *adata; - adata = (struct asic3_data *)dev->driver_data; + adata = (struct asic3_data *)platform_get_drvdata(pdev); return (unsigned long)adata->mapping + (reg >> (2 - adata->bus_shift)); } void -asic3_write_register (struct device *dev, unsigned int reg, unsigned long value) +asic3_write_register (struct platform_device *pdev, unsigned int reg, unsigned long value) { - __raw_writew (value, asic3_address (dev, reg)); + __raw_writew (value, asic3_address (pdev, reg)); } EXPORT_SYMBOL(asic3_write_register); unsigned long -asic3_read_register (struct device *dev, unsigned int reg) +asic3_read_register (struct platform_device *pdev, unsigned int reg) { - return __raw_readw (asic3_address (dev, reg)); + return __raw_readw (asic3_address (pdev, reg)); } EXPORT_SYMBOL(asic3_read_register); @@ -89,20 +89,20 @@ #define ASIC3_GPIO_FN(get_fn_name, set_fn_name, REG) \ u32 \ -get_fn_name (struct device *dev) \ +get_fn_name (struct platform_device *dev) \ { \ - return asic3_read_register (dev, REG); \ + return asic3_read_register (pdev, REG); \ } \ EXPORT_SYMBOL( get_fn_name ); \ \ void \ -set_fn_name (struct device *dev, u32 bits, u32 val) \ +set_fn_name (struct platform_device *pdev, u32 bits, u32 val) \ { \ unsigned long flags; \ \ spin_lock_irqsave (&asic3_gpio_lock, flags); \ - val |= (asic3_read_register (dev, REG) & ~bits); \ - asic3_write_register (dev, REG, val); \ + val |= (asic3_read_register (pdev, REG) & ~bits); \ + asic3_write_register (pdev, REG, val); \ spin_unlock_irqrestore (&asic3_gpio_lock, flags); \ } \ EXPORT_SYMBOL(set_fn_name); @@ -135,18 +135,18 @@ ASIC3_GPIO_FUNCTIONS(c, C) ASIC3_GPIO_FUNCTIONS(d, D) -int asic3_get_gpio_bit(struct device *dev, int gpio) +int asic3_get_gpio_bit(struct platform_device *pdev, int gpio) { u32 mask = ASIC3_GPIO_bit(gpio); switch (gpio >> 4) { case _IPAQ_ASIC3_GPIO_BANK_A: - return asic3_get_gpio_status_a(dev) & mask; + return asic3_get_gpio_status_a(pdev) & mask; case _IPAQ_ASIC3_GPIO_BANK_B: - return asic3_get_gpio_status_b(dev) & mask; + return asic3_get_gpio_status_b(pdev) & mask; case _IPAQ_ASIC3_GPIO_BANK_C: - return asic3_get_gpio_status_c(dev) & mask; + return asic3_get_gpio_status_c(pdev) & mask; case _IPAQ_ASIC3_GPIO_BANK_D: - return asic3_get_gpio_status_d(dev) & mask; + return asic3_get_gpio_status_d(pdev) & mask; } printk("%s: invalid GPIO value 0x%x", __FUNCTION__, gpio); @@ -156,9 +156,9 @@ EXPORT_SYMBOL(asic3_get_gpio_bit); int -asic3_irq_base (struct device *dev) +asic3_irq_base (struct platform_device *pdev) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); return asic->irq_base; } @@ -166,9 +166,9 @@ EXPORT_SYMBOL(asic3_irq_base); void -asic3_set_led (struct device *dev, int led_num, int duty_time, int cycle_time) +asic3_set_led (struct platform_device *pdev, int led_num, int duty_time, int cycle_time) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned int led_base; /* it's a macro thing: see #define _IPAQ_ASIC_LED_0_Base for why you @@ -200,9 +200,9 @@ EXPORT_SYMBOL(asic3_set_led); void -asic3_set_clock_sel (struct device *dev, unsigned long bits, unsigned long val) +asic3_set_clock_sel (struct platform_device *pdev, unsigned long bits, unsigned long val) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned long flags, v; spin_lock_irqsave (&asic3_gpio_lock, flags); @@ -214,9 +214,9 @@ EXPORT_SYMBOL (asic3_set_clock_sel); void -asic3_set_clock_cdex (struct device *dev, unsigned long bits, unsigned long val) +asic3_set_clock_cdex (struct platform_device *pdev, unsigned long bits, unsigned long val) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned long flags, v; spin_lock_irqsave (&asic3_gpio_lock, flags); @@ -228,9 +228,9 @@ EXPORT_SYMBOL (asic3_set_clock_cdex); void -asic3_set_extcf_select (struct device *dev, unsigned long bits, unsigned long val) +asic3_set_extcf_select (struct platform_device *pdev, unsigned long bits, unsigned long val) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned long flags, v; spin_lock_irqsave (&asic3_gpio_lock, flags); @@ -242,9 +242,9 @@ EXPORT_SYMBOL (asic3_set_extcf_select); void -asic3_set_extcf_reset (struct device *dev, unsigned long bits, unsigned long val) +asic3_set_extcf_reset (struct platform_device *pdev, unsigned long bits, unsigned long val) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned long flags, v; spin_lock_irqsave (&asic3_gpio_lock, flags); @@ -256,9 +256,9 @@ EXPORT_SYMBOL (asic3_set_extcf_reset); void -asic3_set_sdhwctrl (struct device *dev, unsigned long bits, unsigned long val) +asic3_set_sdhwctrl (struct platform_device *pdev, unsigned long bits, unsigned long val) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); unsigned long flags, v; spin_lock_irqsave (&asic3_gpio_lock, flags); @@ -550,21 +550,18 @@ }; static void -asic3_release (struct device *dev) +asic3_release (struct platform_device *sdev) { - struct platform_device *sdev = to_platform_device (dev); - kfree (sdev->resource); kfree (sdev); } int -asic3_register_mmc (struct device *dev) +asic3_register_mmc (struct platform_device *pdev) { struct platform_device *sdev = kmalloc (sizeof (*sdev), GFP_KERNEL); struct tmio_mmc_hwconfig *mmc_config = kmalloc (sizeof (*mmc_config), GFP_KERNEL); - struct platform_device *pdev = to_platform_device (dev); - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); struct resource *res; int rc; @@ -611,9 +608,9 @@ EXPORT_SYMBOL(asic3_register_mmc); int -asic3_unregister_mmc (struct device *dev) +asic3_unregister_mmc (struct platform_device *pdev) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); platform_device_unregister (asic->mmc_dev); asic->mmc_dev = 0; @@ -622,10 +619,9 @@ EXPORT_SYMBOL(asic3_unregister_mmc); static int -asic3_probe (struct device *dev) +asic3_probe (struct platform_device *pdev) { - struct platform_device *pdev = to_platform_device (dev); - struct asic3_platform_data *pdata = dev->platform_data; + struct asic3_platform_data *pdata = pdev->dev.platform_data; struct asic3_data *asic; unsigned long clksel; @@ -635,7 +631,7 @@ memset (asic, 0, sizeof (*asic)); spin_lock_init (&asic3_gpio_lock); - dev->driver_data = asic; + platform_set_drvdata(pdev, asic); asic->mapping = ioremap ((unsigned long)pdev->resource[0].start, IPAQ_ASIC3_MAP_SIZE); if (!asic->mapping) { @@ -658,46 +654,46 @@ __asic3_write_register (asic, _IPAQ_ASIC3_GPIO_C_Base + _IPAQ_ASIC3_GPIO_Mask, 0xffff); __asic3_write_register (asic, _IPAQ_ASIC3_GPIO_D_Base + _IPAQ_ASIC3_GPIO_Mask, 0xffff); - asic3_set_gpio_sleepmask_a (dev, 0xffff, 0xffff); - asic3_set_gpio_sleepmask_b (dev, 0xffff, 0xffff); - asic3_set_gpio_sleepmask_c (dev, 0xffff, 0xffff); - asic3_set_gpio_sleepmask_d (dev, 0xffff, 0xffff); + asic3_set_gpio_sleepmask_a (pdev, 0xffff, 0xffff); + asic3_set_gpio_sleepmask_b (pdev, 0xffff, 0xffff); + asic3_set_gpio_sleepmask_c (pdev, 0xffff, 0xffff); + asic3_set_gpio_sleepmask_d (pdev, 0xffff, 0xffff); if (pdata) { - asic3_set_gpio_out_a(dev, 0xffff, pdata->gpio_a.init); - asic3_set_gpio_out_b(dev, 0xffff, pdata->gpio_b.init); - asic3_set_gpio_out_c(dev, 0xffff, pdata->gpio_c.init); - asic3_set_gpio_out_d(dev, 0xffff, pdata->gpio_d.init); - - asic3_set_gpio_dir_a(dev, 0xffff, pdata->gpio_a.dir); - asic3_set_gpio_dir_b(dev, 0xffff, pdata->gpio_b.dir); - asic3_set_gpio_dir_c(dev, 0xffff, pdata->gpio_c.dir); - asic3_set_gpio_dir_d(dev, 0xffff, pdata->gpio_d.dir); - - asic3_set_gpio_sleepmask_a(dev, 0xffff, pdata->gpio_a.sleep_mask); - asic3_set_gpio_sleepmask_b(dev, 0xffff, pdata->gpio_b.sleep_mask); - asic3_set_gpio_sleepmask_c(dev, 0xffff, pdata->gpio_c.sleep_mask); - asic3_set_gpio_sleepmask_d(dev, 0xffff, pdata->gpio_d.sleep_mask); - - asic3_set_gpio_sleepout_a(dev, 0xffff, pdata->gpio_a.sleep_out); - asic3_set_gpio_sleepout_b(dev, 0xffff, pdata->gpio_b.sleep_out); - asic3_set_gpio_sleepout_c(dev, 0xffff, pdata->gpio_c.sleep_out); - asic3_set_gpio_sleepout_d(dev, 0xffff, pdata->gpio_d.sleep_out); - - asic3_set_gpio_battfaultout_a(dev, 0xffff, pdata->gpio_a.batt_fault_out); - asic3_set_gpio_battfaultout_b(dev, 0xffff, pdata->gpio_b.batt_fault_out); - asic3_set_gpio_battfaultout_c(dev, 0xffff, pdata->gpio_c.batt_fault_out); - asic3_set_gpio_battfaultout_d(dev, 0xffff, pdata->gpio_d.batt_fault_out); - - asic3_set_gpio_sleepconf_a(dev, 0xffff, pdata->gpio_a.sleep_conf); - asic3_set_gpio_sleepconf_b(dev, 0xffff, pdata->gpio_b.sleep_conf); - asic3_set_gpio_sleepconf_c(dev, 0xffff, pdata->gpio_c.sleep_conf); - asic3_set_gpio_sleepconf_d(dev, 0xffff, pdata->gpio_d.sleep_conf); - - asic3_set_gpio_alt_fn_a(dev, 0xffff, pdata->gpio_a.alt_function); - asic3_set_gpio_alt_fn_b(dev, 0xffff, pdata->gpio_b.alt_function); - asic3_set_gpio_alt_fn_c(dev, 0xffff, pdata->gpio_c.alt_function); - asic3_set_gpio_alt_fn_d(dev, 0xffff, pdata->gpio_d.alt_function); + asic3_set_gpio_out_a(pdev, 0xffff, pdata->gpio_a.init); + asic3_set_gpio_out_b(pdev, 0xffff, pdata->gpio_b.init); + asic3_set_gpio_out_c(pdev, 0xffff, pdata->gpio_c.init); + asic3_set_gpio_out_d(pdev, 0xffff, pdata->gpio_d.init); + + asic3_set_gpio_dir_a(pdev, 0xffff, pdata->gpio_a.dir); + asic3_set_gpio_dir_b(pdev, 0xffff, pdata->gpio_b.dir); + asic3_set_gpio_dir_c(pdev, 0xffff, pdata->gpio_c.dir); + asic3_set_gpio_dir_d(pdev, 0xffff, pdata->gpio_d.dir); + + asic3_set_gpio_sleepmask_a(pdev, 0xffff, pdata->gpio_a.sleep_mask); + asic3_set_gpio_sleepmask_b(pdev, 0xffff, pdata->gpio_b.sleep_mask); + asic3_set_gpio_sleepmask_c(pdev, 0xffff, pdata->gpio_c.sleep_mask); + asic3_set_gpio_sleepmask_d(pdev, 0xffff, pdata->gpio_d.sleep_mask); + + asic3_set_gpio_sleepout_a(pdev, 0xffff, pdata->gpio_a.sleep_out); + asic3_set_gpio_sleepout_b(pdev, 0xffff, pdata->gpio_b.sleep_out); + asic3_set_gpio_sleepout_c(pdev, 0xffff, pdata->gpio_c.sleep_out); + asic3_set_gpio_sleepout_d(pdev, 0xffff, pdata->gpio_d.sleep_out); + + asic3_set_gpio_battfaultout_a(pdev, 0xffff, pdata->gpio_a.batt_fault_out); + asic3_set_gpio_battfaultout_b(pdev, 0xffff, pdata->gpio_b.batt_fault_out); + asic3_set_gpio_battfaultout_c(pdev, 0xffff, pdata->gpio_c.batt_fault_out); + asic3_set_gpio_battfaultout_d(pdev, 0xffff, pdata->gpio_d.batt_fault_out); + + asic3_set_gpio_sleepconf_a(pdev, 0xffff, pdata->gpio_a.sleep_conf); + asic3_set_gpio_sleepconf_b(pdev, 0xffff, pdata->gpio_b.sleep_conf); + asic3_set_gpio_sleepconf_c(pdev, 0xffff, pdata->gpio_c.sleep_conf); + asic3_set_gpio_sleepconf_d(pdev, 0xffff, pdata->gpio_d.sleep_conf); + + asic3_set_gpio_alt_fn_a(pdev, 0xffff, pdata->gpio_a.alt_function); + asic3_set_gpio_alt_fn_b(pdev, 0xffff, pdata->gpio_b.alt_function); + asic3_set_gpio_alt_fn_c(pdev, 0xffff, pdata->gpio_c.alt_function); + asic3_set_gpio_alt_fn_d(pdev, 0xffff, pdata->gpio_d.alt_function); } asic->irq_nr = -1; @@ -712,7 +708,7 @@ asic->irq_base = alloc_irq_space (ASIC3_NR_IRQS); if (asic->irq_base == -1) { printk("asic3: unable to allocate %d IRQs\n", ASIC3_NR_IRQS); - asic3_remove (dev); + asic3_remove (pdev); return -ENOMEM; } @@ -749,9 +745,9 @@ if (pdev->num_resources > 2) { int rc; - rc = asic3_register_mmc (dev); + rc = asic3_register_mmc (pdev); if (rc) { - asic3_remove (dev); + asic3_remove (pdev); return rc; } } @@ -763,11 +759,11 @@ } static int -asic3_remove (struct device *dev) +asic3_remove (struct platform_device *pdev) { struct asic3_data *asic; - struct asic3_platform_data *pdata = dev->platform_data; - asic = dev->driver_data; + struct asic3_platform_data *pdata = pdev->dev.platform_data; + asic = platform_get_drvdata(pdev); if (pdata && pdata->child_platform_devs && pdata->num_child_platform_devs != 0) { int i; @@ -792,7 +788,7 @@ } if (asic->mmc_dev) - asic3_unregister_mmc (dev); + asic3_unregister_mmc (pdev); __asic3_write_register (asic, _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_SEL, 0); __asic3_write_register (asic, _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_INTR_IntMask, 0); @@ -805,16 +801,16 @@ } static void -asic3_shutdown (struct device *dev) +asic3_shutdown (struct platform_device *pdev) { } static unsigned short suspend_cdex; static int -asic3_suspend (struct device *dev, pm_message_t state) +asic3_suspend (struct platform_device *pdev, pm_message_t state) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); suspend_cdex = __asic3_read_register (asic, _IPAQ_ASIC3_CLOCK_Base + _IPAQ_ASIC3_CLOCK_CDEX); /* The LEDs are still active during suspend */ @@ -825,9 +821,9 @@ } static int -asic3_resume (struct device *dev) +asic3_resume (struct platform_device *pdev) { - struct asic3_data *asic = dev->driver_data; + struct asic3_data *asic = platform_get_drvdata(pdev); __asic3_write_register (asic, _IPAQ_ASIC3_INTR_Base + _IPAQ_ASIC3_CLOCK_CDEX, suspend_cdex ); @@ -844,29 +840,29 @@ return 0; } -static struct device_driver asic3_device_driver = { - .name = "asic3", - .bus = &platform_bus_type, - +static struct platform_driver asic3_driver = { .probe = asic3_probe, .remove = asic3_remove, .suspend = asic3_suspend, .resume = asic3_resume, .shutdown = asic3_shutdown, + .dev = { + .name = "asic3", + }, }; static int __init asic3_base_init (void) { int retval = 0; - retval = driver_register (&asic3_device_driver); + retval = platform_driver_register (&asic3_driver); return retval; } static void __exit asic3_base_exit (void) { - driver_unregister (&asic3_device_driver); + platform_driver_unregister (&asic3_driver); } #ifdef MODULE