Index: arch/arm/mach-pxa/hx4700/hx4700_core.c =================================================================== RCS file: /cvs/linux/kernel26/arch/arm/mach-pxa/hx4700/hx4700_core.c,v retrieving revision 1.35 diff -u -r1.35 hx4700_core.c --- arch/arm/mach-pxa/hx4700/hx4700_core.c 18 Nov 2006 00:34:29 -0000 1.35 +++ arch/arm/mach-pxa/hx4700/hx4700_core.c 30 Nov 2006 18:35:34 -0000 @@ -74,7 +74,7 @@ int hx4700_udc_detect( void ) { - return (asic3_get_gpio_status_d(&hx4700_asic3.dev) + return (asic3_get_gpio_status_d(&hx4700_asic3) & (1 << GPIOD_USBC_DETECT_N)) ? 0 : 1; } @@ -86,7 +86,7 @@ unsigned int statusd; int connected; - statusd = asic3_get_gpio_status_d( &hx4700_asic3.dev ); + statusd = asic3_get_gpio_status_d( &hx4700_asic3 ); connected = (statusd & (1<irq = HX4700_IRQ( CF_RNB ); @@ -150,7 +150,7 @@ { int statusd; - statusd = asic3_get_gpio_status_d( &hx4700_asic3.dev ); + statusd = asic3_get_gpio_status_d( &hx4700_asic3 ); // printk( "hx4700_pcmcia_socket_state: statusd=0x%x\n", statusd ); state->detect = (statusd & (1<ready = GET_HX4700_GPIO( CF_RNB ) ? 1 : 0; @@ -162,10 +162,10 @@ #if 0 if (state->detect) - asic3_set_gpio_status_c( &hx4700_asic3.dev, 1<flags & SS_RESET) ? 1 : 0, state->Vcc, @@ -187,7 +187,7 @@ hx4700_cf_reset( state->flags & SS_RESET ); if (state->Vcc == 0) { /* Turn on sleep mode, I think. No docs for these bits. */ - asic3_set_extcf_select(&hx4700_asic3.dev, + asic3_set_extcf_select(&hx4700_asic3, ASIC3_EXTCF_CF0_SLEEP_MODE | ASIC3_EXTCF_CF1_SLEEP_MODE | ASIC3_EXTCF_CF0_BUF_EN | ASIC3_EXTCF_CF1_BUF_EN | ASIC3_EXTCF_CF0_PWAIT_EN | ASIC3_EXTCF_CF1_PWAIT_EN, @@ -204,7 +204,7 @@ hx4700_egpio_enable( EGPIO4_CF_3V3_ON ); mdelay(1); /* Turn on CF stuff without messing with SD bit 14. */ - asic3_set_extcf_select(&hx4700_asic3.dev, + asic3_set_extcf_select(&hx4700_asic3, ASIC3_EXTCF_CF0_SLEEP_MODE | ASIC3_EXTCF_CF1_SLEEP_MODE | ASIC3_EXTCF_CF0_BUF_EN | ASIC3_EXTCF_CF1_BUF_EN | ASIC3_EXTCF_CF0_PWAIT_EN | ASIC3_EXTCF_CF1_PWAIT_EN, Index: arch/arm/mach-pxa/hx4700/hx4700_power.c =================================================================== RCS file: /cvs/linux/kernel26/arch/arm/mach-pxa/hx4700/hx4700_power.c,v retrieving revision 1.22 diff -u -r1.22 hx4700_power.c --- arch/arm/mach-pxa/hx4700/hx4700_power.c 28 Nov 2006 03:51:51 -0000 1.22 +++ arch/arm/mach-pxa/hx4700/hx4700_power.c 30 Nov 2006 18:35:40 -0000 @@ -382,19 +382,19 @@ w1_init(void) { /* Turn on external clocks and the OWM clock */ - asic3_set_clock_cdex(&hx4700_asic3.dev, + asic3_set_clock_cdex(&hx4700_asic3, CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM, CLOCK_CDEX_EX0 | CLOCK_CDEX_EX1 | CLOCK_CDEX_OWM); mdelay(1); - asic3_set_extcf_reset(&hx4700_asic3.dev, (1 << 6), (1 << 6)); + asic3_set_extcf_reset(&hx4700_asic3, (1 << 6), (1 << 6)); mdelay(1); - asic3_set_extcf_reset(&hx4700_asic3.dev, (1 << 6), 0); + asic3_set_extcf_reset(&hx4700_asic3, (1 << 6), 0); mdelay(1); /* Clear OWM_SMB, set OWM_EN */ - asic3_set_extcf_select(&hx4700_asic3.dev, + asic3_set_extcf_select(&hx4700_asic3, ASIC3_EXTCF_OWM_SMB | ASIC3_EXTCF_OWM_EN, 0 | ASIC3_EXTCF_OWM_EN); @@ -609,7 +609,7 @@ if(!module_data.initialized) return; - retval = asic3_get_gpio_status_d( &hx4700_asic3.dev ); + retval = asic3_get_gpio_status_d( &hx4700_asic3 ); ac_in = (retval & (1<rising = (statusd & key->gpiod_bit) == 0; set_irq_type( irq, key->rising ? IRQT_RISING : IRQT_FALLING ); input_report_key( ts_data->input, key->key, key->rising ); @@ -463,7 +463,7 @@ asic3_key[0].gpiod_bit = (1<asic3_dev); + base_irq = asic3_irq_base(pdata->asic3_pdev); for (i = 0; i < pdata->nbuttons; i++) { struct asic3_keys_button *b = &pdata->buttons[i]; if ((base_irq + b->gpio) == irq) { - int state = !!asic3_get_gpio_bit(pdata->asic3_dev, b->gpio); + int state = !!asic3_get_gpio_bit(pdata->asic3_pdev, b->gpio); if (state) set_irq_type(irq, IRQ_TYPE_EDGE_FALLING); else @@ -61,7 +61,7 @@ external_input = 0; } - base_irq = asic3_irq_base(pdata->asic3_dev); + base_irq = asic3_irq_base(pdata->asic3_pdev); for (i = 0; i < pdata->nbuttons; i++) { struct asic3_keys_button *b = &pdata->buttons[i]; @@ -83,7 +83,7 @@ struct asic3_keys_platform_data *pdata = pdev->dev.platform_data; int i, base_irq; - base_irq = asic3_irq_base(pdata->asic3_dev); + base_irq = asic3_irq_base(pdata->asic3_pdev); for (i = 0; i < pdata->nbuttons; i++) { free_irq(base_irq + pdata->buttons[i].gpio, NULL); } Index: drivers/leds/leds-asic3.c =================================================================== RCS file: /cvs/linux/kernel26/drivers/leds/leds-asic3.c,v retrieving revision 1.3 diff -u -r1.3 leds-asic3.c --- drivers/leds/leds-asic3.c 29 Nov 2006 17:49:39 -0000 1.3 +++ drivers/leds/leds-asic3.c 30 Nov 2006 18:35:47 -0000 @@ -34,28 +34,28 @@ struct asic3_led *led = container_of(led_cdev, struct asic3_led, led_cdev); struct asic3_leds_machinfo *machinfo = led->machinfo; - struct device *asic3_dev = &machinfo->asic3_pdev->dev; + struct platform_device *asic3_pdev = &machinfo->asic3_pdev; dbg("%s:%s %d-%s %d\n", __FILE__, __FUNCTION__, led->hw_num, led->led_cdev.name, b); if (b == LED_OFF) { - asic3_set_led(asic3_dev, led->hw_num, 0, 16); - asic3_set_gpio_out_c(asic3_dev, led->hw_num, 0); + asic3_set_led(asic3_pdev, led->hw_num, 0, 16); + asic3_set_gpio_out_c(asic3_pdev, led->hw_num, 0); } else { - asic3_set_gpio_out_c(asic3_dev, led->hw_num, led->hw_num); + asic3_set_gpio_out_c(asic3_pdev, led->hw_num, led->hw_num); #ifdef CONFIG_LEDS_TRIGGER_TIMER_ASIC3 if (led_cdev->trigger && led_cdev->trigger->is_led_supported && led_cdev->trigger->is_led_supported(led_cdev)) { struct asic3_timer_data *td = led_cdev->trigger_data; if (!td) return; - asic3_set_led(asic3_dev, led->hw_num, td->delay_on/8, + asic3_set_led(asic3_pdev, led->hw_num, td->delay_on/8, (td->delay_on + td->delay_off)/8); } else #endif - asic3_set_led(asic3_dev, led->hw_num, 16, 16); + asic3_set_led(asic3_pdev, led->hw_num, 16, 16); } return; @@ -72,7 +72,7 @@ // Turn on clocks early, for the case if trigger would enable // led immediately after led_classdev_register(). - asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, + asic3_set_clock_cdex(&machinfo->asic3_pdev, CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2); @@ -92,7 +92,7 @@ out_err: while (--i >= 0) led_classdev_unregister(&leds[i].led_cdev); - asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, + asic3_set_clock_cdex(&machinfo->asic3_pdev, CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, 0 | 0 | 0); @@ -111,7 +111,7 @@ for (i = 0; i < machinfo->num_leds; i++) led_classdev_unregister(&leds[i].led_cdev); - asic3_set_clock_cdex(&machinfo->asic3_pdev->dev, + asic3_set_clock_cdex(&machinfo->asic3_pdev, CLOCK_CDEX_LED0 | CLOCK_CDEX_LED1 | CLOCK_CDEX_LED2, 0 | 0 | 0); Index: drivers/mmc/asic3_mmc.c =================================================================== RCS file: /cvs/linux/kernel26/drivers/mmc/asic3_mmc.c,v retrieving revision 1.18 diff -u -r1.18 asic3_mmc.c --- drivers/mmc/asic3_mmc.c 2 Sep 2006 23:55:15 -0000 1.18 +++ drivers/mmc/asic3_mmc.c 30 Nov 2006 18:35:48 -0000 @@ -62,7 +62,7 @@ struct asic3_mmc_host { void *ctl_base; - struct device *asic3_dev; /* asic3 device */ + struct platform_device *asic3_pdev; /* asic3 device */ unsigned long bus_shift; struct mmc_command *cmd; struct mmc_request *mrq; @@ -656,28 +656,28 @@ /* ASIC3_MMC_REG(host, SD_CTRL, TransactionCtrl) = 0x1000; */ - asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */ + asic3_set_sdhwctrl(host->asic3_pdev, ASIC3_SDHWCTRL_SDPWR, ASIC3_SDHWCTRL_SDPWR); /* turn on power at controller(?) */ } static void -hwinit(struct asic3_mmc_host *host, struct device *dev) +hwinit(struct asic3_mmc_host *host, struct platform_device *pdev) { /* Not sure if it must be done bit by bit, but leaving as-is */ - asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD); - asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP); - asic3_set_sdhwctrl(host->asic3_dev, ~0xfffe, 0); - asic3_set_sdhwctrl(host->asic3_dev, ~0xfffb, 0); + asic3_set_sdhwctrl(host->asic3_pdev, ASIC3_SDHWCTRL_LEVCD, ASIC3_SDHWCTRL_LEVCD); + asic3_set_sdhwctrl(host->asic3_pdev, ASIC3_SDHWCTRL_LEVWP, ASIC3_SDHWCTRL_LEVWP); + asic3_set_sdhwctrl(host->asic3_pdev, ~0xfffe, 0); + asic3_set_sdhwctrl(host->asic3_pdev, ~0xfffb, 0); - asic3_set_clock_cdex (host->asic3_dev, + asic3_set_clock_cdex (host->asic3_pdev, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0, CLOCK_CDEX_EX1 | CLOCK_CDEX_EX0); msleep(1); - asic3_set_clock_sel (host->asic3_dev, + asic3_set_clock_sel (host->asic3_pdev, ASIC3_MMC_DRIVER_CLOCK_SEL_MASK, ASIC3_MMC_DRIVER_CLOCK_SEL_BITS); - asic3_set_clock_cdex (host->asic3_dev, + asic3_set_clock_cdex (host->asic3_pdev, ASIC3_MMC_DRIVER_CLOCK_CDEX_MASK, ASIC3_MMC_DRIVER_CLOCK_CDEX_BITS); msleep(1); @@ -686,7 +686,7 @@ ASIC3_MMC_REG(host, CLOCK, CDEX) &= 0xfffb; #endif - asic3_set_extcf_select(host->asic3_dev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE); + asic3_set_extcf_select(host->asic3_pdev, ASIC3_EXTCF_SD_MEM_ENABLE, ASIC3_EXTCF_SD_MEM_ENABLE); /* Long Delay */ if( !machine_is_h4700()) @@ -697,9 +697,9 @@ #ifdef CONFIG_PM static int -mmc_suspend(struct device *dev, pm_message_t state) +mmc_suspend(struct platform_device *pdev, pm_message_t state) { - struct mmc_host *mmc = dev_get_drvdata(dev); + struct mmc_host *mmc = platform_get_drvdata(pdev); struct asic3_mmc_host *host = mmc_priv(mmc); int ret; @@ -722,7 +722,7 @@ /* power down */ ASIC3_MMC_REG(host, SD_CONFIG, SDHC_Power1) = 0; - asic3_set_clock_cdex (host->asic3_dev, + asic3_set_clock_cdex (host->asic3_pdev, CLOCK_CDEX_SD_HOST | CLOCK_CDEX_SD_BUS, 0); #if 0 /* disable core clock */ @@ -731,20 +731,20 @@ #endif /* Put in suspend mode */ - asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND); + asic3_set_sdhwctrl(host->asic3_pdev, ASIC3_SDHWCTRL_SUSPEND, ASIC3_SDHWCTRL_SUSPEND); return 0; } static int -mmc_resume(struct device *dev) +mmc_resume(struct platform_device *pdev) { - struct mmc_host *mmc = dev_get_drvdata(dev); + struct mmc_host *mmc = platform_get_drvdata(pdev); struct asic3_mmc_host *host = mmc_priv(mmc); printk(KERN_INFO "%s: starting resume\n", DRIVER_NAME); - asic3_set_sdhwctrl(host->asic3_dev, ASIC3_SDHWCTRL_SUSPEND, 0); - hwinit(host, dev); + asic3_set_sdhwctrl(host->asic3_pdev, ASIC3_SDHWCTRL_SUSPEND, 0); + hwinit(host, pdev); /* re-enable card remove / insert interrupt */ ASIC3_MMC_REG(host, SD_CTRL, IntMaskCard) = ~( @@ -761,17 +761,16 @@ #endif static int -mmc_probe(struct device *dev) +mmc_probe(struct platform_device *pdev) { struct mmc_host *mmc; struct asic3_mmc_host *host; int retval = 0; - struct platform_device *pdev = to_platform_device (dev); - struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)dev->platform_data; + struct tmio_mmc_hwconfig *mmc_config = (struct tmio_mmc_hwconfig *)pdev->dev.platform_data; host = 0; - mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, dev); + mmc = mmc_alloc_host(sizeof(struct asic3_mmc_host) + 128, &pdev->dev); if (!mmc) { retval = -ENOMEM; goto exceptional_return; @@ -779,11 +778,11 @@ host = mmc_priv(mmc); host->mmc = mmc; - dev_set_drvdata(dev, mmc); + platform_set_drvdata(pdev, mmc); host->ctl_base = 0; host->bus_shift = mmc_config->address_shift; - host->asic3_dev = pdev->dev.parent; + host->asic3_pdev = to_platform_device(pdev->dev.parent); host->clock_for_sd = 0; tasklet_init(&mmc_data_read_tasklet, mmc_data_transfer, (unsigned long)host); @@ -803,7 +802,7 @@ mmc->f_max = 24000000; /* ARIC: not sure what these should be */ mmc->ocr_avail = MMC_VDD_32_33; - hwinit(host, dev); + hwinit(host, pdev); host->irq = pdev->resource[1].start; @@ -835,11 +834,11 @@ } static int -mmc_remove(struct device *dev) +mmc_remove(struct platform_device *pdev) { - struct mmc_host *mmc = dev_get_drvdata(dev); + struct mmc_host *mmc = platform_get_drvdata(pdev); - dev_set_drvdata(dev, NULL); + platform_set_drvdata(pdev, NULL); if (mmc) { struct asic3_mmc_host *host = mmc_priv(mmc); @@ -854,26 +853,27 @@ /* ------------------- device registration ----------------------- */ -static struct device_driver mmc_asic3_driver = { - .name = DRIVER_NAME, - .bus = &platform_bus_type, - .probe = mmc_probe, - .remove = mmc_remove, +static struct platform_driver mmc_asic3_driver = { + .probe = mmc_probe, + .remove = mmc_remove, #ifdef CONFIG_PM - .suspend = mmc_suspend, - .resume = mmc_resume, + .suspend = mmc_suspend, + .resume = mmc_resume, #endif + .driver = { + .name = DRIVER_NAME, + }, }; static int __init mmc_init(void) { - driver_register(&mmc_asic3_driver); + platform_driver_register(&mmc_asic3_driver); return 0; } static void __exit mmc_exit(void) { - driver_unregister(&mmc_asic3_driver); + platform_driver_unregister(&mmc_asic3_driver); } late_initcall(mmc_init); Index: drivers/soc/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 --- drivers/soc/asic3_base.c 19 Nov 2006 23:08:17 -0000 1.21 +++ drivers/soc/asic3_base.c 30 Nov 2006 18:35:53 -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 *pdev) \ { \ - 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); @@ -559,12 +559,11 @@ } 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; @@ -577,7 +576,7 @@ sdev->id = TMIO_MMC_DEVICE_ID; sdev->name = "asic3_mmc"; - sdev->dev.parent = dev; + sdev->dev.parent = &pdev->dev; sdev->num_resources = 2; sdev->dev.platform_data = mmc_config; sdev->dev.release = asic3_release; @@ -611,9 +610,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 +621,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 +633,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 +656,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 +710,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 +747,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 +761,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 +790,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 +803,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 +823,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 +842,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, + .driver = { + .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 Index: include/asm-arm/hardware/asic3_keys.h =================================================================== RCS file: /cvs/linux/kernel26/include/asm-arm/hardware/asic3_keys.h,v retrieving revision 1.4 diff -u -r1.4 asic3_keys.h --- include/asm-arm/hardware/asic3_keys.h 5 Nov 2006 17:44:28 -0000 1.4 +++ include/asm-arm/hardware/asic3_keys.h 30 Nov 2006 18:35:56 -0000 @@ -13,5 +13,5 @@ struct asic3_keys_button *buttons; int nbuttons; struct input_dev *input; - struct device *asic3_dev; + struct platform_device *asic3_pdev; }; Index: include/linux/soc/asic3_base.h =================================================================== RCS file: /cvs/linux/kernel26/include/linux/soc/asic3_base.h,v retrieving revision 1.8 diff -u -r1.8 asic3_base.h --- include/linux/soc/asic3_base.h 18 Nov 2006 00:34:30 -0000 1.8 +++ include/linux/soc/asic3_base.h 30 Nov 2006 18:36:00 -0000 @@ -1,7 +1,7 @@ /* Private defines - for internal use only */ #define HDR_IPAQ_ASIC3_ACTION(ACTION,action,fn,FN) \ -u32 asic3_get_gpio_ ## action ## _ ## fn (struct device *dev); \ -void asic3_set_gpio_ ## action ## _ ## fn (struct device *dev, u32 bits, u32 val); +u32 asic3_get_gpio_ ## action ## _ ## fn (struct platform_device *pdev); \ +void asic3_set_gpio_ ## action ## _ ## fn (struct platform_device *pdev, u32 bits, u32 val); #define HDR_IPAQ_ASIC3_FN(fn,FN) \ HDR_IPAQ_ASIC3_ACTION ( MASK,mask,fn,FN) \ @@ -34,22 +34,22 @@ /* Public API */ -extern int asic3_irq_base (struct device *dev); +extern int asic3_irq_base (struct platform_device *pdev); -void asic3_write_register (struct device *dev, unsigned int reg, unsigned long value); -unsigned long asic3_read_register (struct device *dev, unsigned int reg); +void asic3_write_register (struct platform_device *pdev, unsigned int reg, unsigned long value); +unsigned long asic3_read_register (struct platform_device *pdev, unsigned int reg); -extern void asic3_set_clock_sel (struct device *dev, unsigned long bits, unsigned long val); -extern u32 asic3_get_clock_cdex (struct device *dev); -extern void asic3_set_clock_cdex (struct device *dev, unsigned long bits, unsigned long val); -extern void asic3_set_extcf_select (struct device *dev, unsigned long bits, unsigned long val); -extern void asic3_set_extcf_reset (struct device *dev, unsigned long bits, unsigned long val); -extern void asic3_set_sdhwctrl (struct device *dev, unsigned long bits, unsigned long val); +extern void asic3_set_clock_sel (struct platform_device *pdev, unsigned long bits, unsigned long val); +extern u32 asic3_get_clock_cdex (struct platform_device *pdev); +extern void asic3_set_clock_cdex (struct platform_device *pdev, unsigned long bits, unsigned long val); +extern void asic3_set_extcf_select (struct platform_device *pdev, unsigned long bits, unsigned long val); +extern void asic3_set_extcf_reset (struct platform_device *pdev, unsigned long bits, unsigned long val); +extern void asic3_set_sdhwctrl (struct platform_device *pdev, unsigned long bits, unsigned long val); -void asic3_set_led( struct device *dev, int led_num, int duty_time, int cycle_time); +void asic3_set_led( struct platform_device *pdev, int led_num, int duty_time, int cycle_time); -extern int asic3_register_mmc (struct device *dev); -extern int asic3_unregister_mmc (struct device *dev); +extern int asic3_register_mmc (struct platform_device *pdev); +extern int asic3_unregister_mmc (struct platform_device *pdev); /* Accessors for GPIO banks */ HDR_IPAQ_ASIC3_FN(a, A) @@ -64,4 +64,4 @@ #define ASIC3_GPIO_bit(gpio) (1 << (gpio & 0xf)) -extern int asic3_get_gpio_bit(struct device *dev, int gpio); +extern int asic3_get_gpio_bit(struct platform_device *pdev, int gpio);