static void em_x270_mci_exit(struct device *dev, void *data) { free_irq(gpio_to_irq(mmc_cd), data); regulator_put(em_x270_sdio_ldo); if (machine_is_em_x270()) gpio_free(GPIO95_MMC_WP); else gpio_free(GPIO38_SD_PWEN); }
static int em_x270_mci_init(struct device *dev, irq_handler_t em_x270_detect_int, void *data) { int err; em_x270_sdio_ldo = regulator_get(dev, "vcc sdio"); if (IS_ERR(em_x270_sdio_ldo)) { dev_err(dev, "can't request SDIO power supply: %ld\n", PTR_ERR(em_x270_sdio_ldo)); return PTR_ERR(em_x270_sdio_ldo); } err = request_irq(gpio_to_irq(mmc_cd), em_x270_detect_int, IRQF_DISABLED | IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "MMC card detect", data); if (err) { dev_err(dev, "can't request MMC card detect IRQ: %d\n", err); goto err_irq; } if (machine_is_em_x270()) { err = gpio_request(GPIO95_MMC_WP, "MMC WP"); if (err) { dev_err(dev, "can't request MMC write protect: %d\n", err); goto err_gpio_wp; } gpio_direction_input(GPIO95_MMC_WP); } else { err = gpio_request(GPIO38_SD_PWEN, "sdio power"); if (err) { dev_err(dev, "can't request MMC power control : %d\n", err); goto err_gpio_wp; } gpio_direction_output(GPIO38_SD_PWEN, 1); } return 0; err_gpio_wp: free_irq(gpio_to_irq(mmc_cd), data); err_irq: regulator_put(em_x270_sdio_ldo); return err; }
static int __init em_x270_init(void) { int ret; if (!(machine_is_em_x270() || machine_is_exeda() || machine_is_cm_x300())) return -ENODEV; em_x270_snd_device = platform_device_alloc("soc-audio", -1); if (!em_x270_snd_device) return -ENOMEM; platform_set_drvdata(em_x270_snd_device, &em_x270); ret = platform_device_add(em_x270_snd_device); if (ret) platform_device_put(em_x270_snd_device); return ret; }
static int __init em_x270_init(void) { int ret; if (!machine_is_em_x270()) return -ENODEV; em_x270_snd_device = platform_device_alloc("soc-audio", -1); if (!em_x270_snd_device) return -ENOMEM; platform_set_drvdata(em_x270_snd_device, &em_x270_snd_devdata); em_x270_snd_devdata.dev = &em_x270_snd_device->dev; ret = platform_device_add(em_x270_snd_device); if (ret) platform_device_put(em_x270_snd_device); return ret; }
static void __init em_x270_init(void) { pxa2xx_mfp_config(ARRAY_AND_SIZE(common_pin_config)); pxa_set_ffuart_info(NULL); pxa_set_btuart_info(NULL); pxa_set_stuart_info(NULL); #ifdef CONFIG_PM pxa27x_set_pwrmode(PWRMODE_DEEPSLEEP); #endif if (machine_is_em_x270()) em_x270_module_init(); else if (machine_is_exeda()) em_x270_exeda_init(); else panic("Unsupported machine: %d\n", machine_arch_type); em_x270_init_da9030(); em_x270_init_dm9000(); em_x270_init_rtc(); em_x270_init_nand(); em_x270_init_nor(); em_x270_init_lcd(); em_x270_init_mmc(); em_x270_init_ohci(); em_x270_init_keypad(); em_x270_init_gpio_keys(); em_x270_init_ac97(); em_x270_init_spi(); em_x270_init_i2c(); em_x270_init_camera(); em_x270_userspace_consumers_init(); regulator_has_full_constraints(); }