static int __init tosa_init(void) { int ret; if (!machine_is_tosa()) return -ENODEV; tosa_snd_device = platform_device_alloc("soc-audio", -1); if (!tosa_snd_device) { ret = -ENOMEM; goto err_alloc; } platform_set_drvdata(tosa_snd_device, &tosa_snd_devdata); tosa_snd_devdata.dev = &tosa_snd_device->dev; ret = platform_device_add(tosa_snd_device); if (!ret) return 0; platform_device_put(tosa_snd_device); err_alloc: return ret; }
static int __init tosa_init(void) { int ret; if (!machine_is_tosa()) return -ENODEV; ret = gpio_request(TOSA_GPIO_L_MUTE, "Headphone Jack"); if (ret) return ret; gpio_direction_output(TOSA_GPIO_L_MUTE, 0); tosa_snd_device = platform_device_alloc("soc-audio", -1); if (!tosa_snd_device) { ret = -ENOMEM; goto err_alloc; } platform_set_drvdata(tosa_snd_device, &tosa_snd_devdata); tosa_snd_devdata.dev = &tosa_snd_device->dev; ret = platform_device_add(tosa_snd_device); if (!ret) return 0; platform_device_put(tosa_snd_device); err_alloc: gpio_free(TOSA_GPIO_L_MUTE); return ret; }
/* * Read MAX1111 ADC */ int sharpsl_pm_pxa_read_max1111(int channel) { if (machine_is_tosa()) // Ugly, better move this function into another module return 0; return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); }
/* * Read MAX1111 ADC */ int sharpsl_pm_pxa_read_max1111(int channel) { /* Ugly, better move this function into another module */ if (machine_is_tosa()) return 0; /* max1111 accepts channels from 0-3, however, * it is encoded from 0-7 here in the code. */ return max1111_read_channel(channel >> 1); }
int sharpsl_pm_pxa_read_max1111(int channel) { if (machine_is_tosa()) return 0; #ifdef CONFIG_CORGI_SSP_DEPRECATED return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); #else extern int max1111_read_channel(int); return max1111_read_channel(channel >> 1); #endif }
int __init init_sharpsl(void) { struct mtd_partition *parts; int nb_parts = 0; char *part_type = "static"; printk(KERN_NOTICE "Sharp SL series flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR); sharpsl_map.virt = ioremap(WINDOW_ADDR, WINDOW_SIZE); if (!sharpsl_map.virt) { printk("Failed to ioremap\n"); return -EIO; } simple_map_init(&sharpsl_map); mymtd = do_map_probe("map_rom", &sharpsl_map); if (!mymtd) { iounmap(sharpsl_map.virt); return -ENXIO; } mymtd->owner = THIS_MODULE; if (machine_is_corgi() || machine_is_shepherd() || machine_is_husky() || machine_is_poodle()) { sharpsl_partitions[0].size=0x006d0000; sharpsl_partitions[0].offset=0x00120000; } else if (machine_is_tosa()) { sharpsl_partitions[0].size=0x006a0000; sharpsl_partitions[0].offset=0x00160000; } else if (machine_is_spitz() || machine_is_akita() || machine_is_borzoi()) { sharpsl_partitions[0].size=0x006b0000; sharpsl_partitions[0].offset=0x00140000; } else { map_destroy(mymtd); iounmap(sharpsl_map.virt); return -ENODEV; } parts = sharpsl_partitions; nb_parts = ARRAY_SIZE(sharpsl_partitions); printk(KERN_NOTICE "Using %s partition definition\n", part_type); add_mtd_partitions(mymtd, parts, nb_parts); return 0; }
/* * Read MAX1111 ADC */ int sharpsl_pm_pxa_read_max1111(int channel) { if (machine_is_tosa()) // Ugly, better move this function into another module return 0; #ifdef CONFIG_CORGI_SSP_DEPRECATED return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1 | MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR); #else extern int max1111_read_channel(int); /* max1111 accepts channels from 0-3, however, * it is encoded from 0-7 here in the code. */ return max1111_read_channel(channel >> 1); #endif }
static int __devinit tosa_bat_probe(struct platform_device *dev) { int ret; int i; if (!machine_is_tosa()) return -ENODEV; for (i = 0; i < ARRAY_SIZE(gpios); i++) { ret = gpio_request(gpios[i].gpio, gpios[i].name); if (ret) { i--; goto err_gpio; } if (gpios[i].output) ret = gpio_direction_output(gpios[i].gpio, gpios[i].value); else ret = gpio_direction_input(gpios[i].gpio); if (ret) goto err_gpio; } mutex_init(&tosa_bat_main.work_lock); mutex_init(&tosa_bat_jacket.work_lock); INIT_WORK(&bat_work, tosa_bat_work); ret = power_supply_register(&dev->dev, &tosa_bat_main.psy); if (ret) goto err_psy_reg_main; ret = power_supply_register(&dev->dev, &tosa_bat_jacket.psy); if (ret) goto err_psy_reg_jacket; ret = power_supply_register(&dev->dev, &tosa_bat_bu.psy); if (ret) goto err_psy_reg_bu; ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "main full", &tosa_bat_main); if (ret) goto err_req_main; ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "jacket full", &tosa_bat_jacket); if (ret) goto err_req_jacket; ret = request_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "jacket detect", &tosa_bat_jacket); if (!ret) { schedule_work(&bat_work); return 0; } free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket); err_req_jacket: free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main); err_req_main: power_supply_unregister(&tosa_bat_bu.psy); err_psy_reg_bu: power_supply_unregister(&tosa_bat_jacket.psy); err_psy_reg_jacket: power_supply_unregister(&tosa_bat_main.psy); err_psy_reg_main: flush_scheduled_work(); i--; err_gpio: for (; i >= 0; i--) gpio_free(gpios[i].gpio); return ret; }
static int __devinit tosa_bat_probe(struct platform_device *dev) { int ret; if (!machine_is_tosa()) return -ENODEV; ret = gpio_request_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios)); if (ret) return ret; mutex_init(&tosa_bat_main.work_lock); mutex_init(&tosa_bat_jacket.work_lock); INIT_WORK(&bat_work, tosa_bat_work); ret = power_supply_register(&dev->dev, &tosa_bat_main.psy); if (ret) goto err_psy_reg_main; ret = power_supply_register(&dev->dev, &tosa_bat_jacket.psy); if (ret) goto err_psy_reg_jacket; ret = power_supply_register(&dev->dev, &tosa_bat_bu.psy); if (ret) goto err_psy_reg_bu; ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "main full", &tosa_bat_main); if (ret) goto err_req_main; ret = request_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "jacket full", &tosa_bat_jacket); if (ret) goto err_req_jacket; ret = request_irq(gpio_to_irq(TOSA_GPIO_JACKET_DETECT), tosa_bat_gpio_isr, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING, "jacket detect", &tosa_bat_jacket); if (!ret) { schedule_work(&bat_work); return 0; } free_irq(gpio_to_irq(TOSA_GPIO_BAT1_CRG), &tosa_bat_jacket); err_req_jacket: free_irq(gpio_to_irq(TOSA_GPIO_BAT0_CRG), &tosa_bat_main); err_req_main: power_supply_unregister(&tosa_bat_bu.psy); err_psy_reg_bu: power_supply_unregister(&tosa_bat_jacket.psy); err_psy_reg_jacket: power_supply_unregister(&tosa_bat_main.psy); err_psy_reg_main: /* see comment in tosa_bat_remove */ cancel_work_sync(&bat_work); gpio_free_array(tosa_bat_gpios, ARRAY_SIZE(tosa_bat_gpios)); return ret; }