void __init nokia_n800_common_init(void) { platform_add_devices(n800_devices, ARRAY_SIZE(n800_devices)); n800_flash_init(); n800_mmc_init(); n800_bt_init(); n800_dsp_init(); n800_usb_init(); n800_cam_init(); if (machine_is_nokia_n800()) spi_register_board_info(n800_spi_board_info, ARRAY_SIZE(n800_spi_board_info)); if (machine_is_nokia_n810()) { tsc2005_set_config(); spi_register_board_info(n810_spi_board_info, ARRAY_SIZE(n810_spi_board_info)); } omap_serial_init(); omap_register_i2c_bus(1, 400, n800_i2c_board_info_1, ARRAY_SIZE(n800_i2c_board_info_1)); omap_register_i2c_bus(2, 400, n8x0_i2c_board_info_2, ARRAY_SIZE(n8x0_i2c_board_info_2)); if (machine_is_nokia_n800()) i2c_register_board_info(2, n800_i2c_board_info_2, ARRAY_SIZE(n800_i2c_board_info_2)); if (machine_is_nokia_n810()) i2c_register_board_info(2, n810_i2c_board_info_2, ARRAY_SIZE(n810_i2c_board_info_2)); //mipid_dev_init(); //blizzard_dev_init(); n800_display_init(); }
static void __init n8x0_mmc_init(void) { int err; if (machine_is_nokia_n810()) { mmc1_data.slots[0].name = "external"; /* * Some Samsung Movinand chips do not like open-ended * multi-block reads and fall to braind-dead state * while doing so. Reducing the number of blocks in * the transfer or delays in clock disable do not help */ mmc1_data.slots[1].name = "internal"; mmc1_data.slots[1].ban_openended = 1; } err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot switch"); if (err) return; if (machine_is_nokia_n810()) { err = gpio_request_array(n810_emmc_gpios, ARRAY_SIZE(n810_emmc_gpios)); if (err) { gpio_free(N8X0_SLOT_SWITCH_GPIO); return; } } mmc_data[0] = &mmc1_data; omap242x_init_mmc(mmc_data); }
static void __init n8x0_mmc_init(void) { int err; if (machine_is_nokia_n810()) { mmc1_data.slots[0].name = "external"; mmc1_data.slots[1].name = "internal"; mmc1_data.slots[1].ban_openended = 1; } err = gpio_request_one(N8X0_SLOT_SWITCH_GPIO, GPIOF_OUT_INIT_LOW, "MMC slot switch"); if (err) return; if (machine_is_nokia_n810()) { err = gpio_request_array(n810_emmc_gpios, ARRAY_SIZE(n810_emmc_gpios)); if (err) { gpio_free(N8X0_SLOT_SWITCH_GPIO); return; } } mmc_data[0] = &mmc1_data; omap242x_init_mmc(mmc_data); }
static const struct tcm825x_reg *tcm825x_default_regs(void) { if (machine_is_nokia_n810()) return tcm825x_regs_n810; return tcm825x_regs_n800; }
static void __init n8x0_mmc_init(void) { int err; if (machine_is_nokia_n810()) { mmc1_data.slots[0].name = "external"; /* * Some Samsung Movinand chips do not like open-ended * multi-block reads and fall to braind-dead state * while doing so. Reducing the number of blocks in * the transfer or delays in clock disable do not help */ mmc1_data.slots[1].name = "internal"; mmc1_data.slots[1].ban_openended = 1; } err = gpio_request(N8X0_SLOT_SWITCH_GPIO, "MMC slot switch"); if (err) return; gpio_direction_output(N8X0_SLOT_SWITCH_GPIO, 0); if (machine_is_nokia_n810()) { err = gpio_request(N810_EMMC_VSD_GPIO, "MMC slot 2 Vddf"); if (err) { gpio_free(N8X0_SLOT_SWITCH_GPIO); return; } gpio_direction_output(N810_EMMC_VSD_GPIO, 0); err = gpio_request(N810_EMMC_VIO_GPIO, "MMC slot 2 Vdd"); if (err) { gpio_free(N8X0_SLOT_SWITCH_GPIO); gpio_free(N810_EMMC_VSD_GPIO); return; } gpio_direction_output(N810_EMMC_VIO_GPIO, 0); } mmc_data[0] = &mmc1_data; omap2_init_mmc(mmc_data, OMAP24XX_NR_MMC); }
static void n8x0_mmc_cleanup(struct device *dev) { menelaus_unregister_mmc_callback(); gpio_free(N8X0_SLOT_SWITCH_GPIO); if (machine_is_nokia_n810()) { gpio_free(N810_EMMC_VSD_GPIO); gpio_free(N810_EMMC_VIO_GPIO); } }
static void __init n8x0_init_machine(void) { omap2420_mux_init(board_mux, OMAP_PACKAGE_ZAC); /* FIXME: add n810 spi devices */ spi_register_board_info(n800_spi_board_info, ARRAY_SIZE(n800_spi_board_info)); omap_register_i2c_bus(1, 400, n8x0_i2c_board_info_1, ARRAY_SIZE(n8x0_i2c_board_info_1)); omap_register_i2c_bus(2, 400, NULL, 0); if (machine_is_nokia_n810()) i2c_register_board_info(2, n810_i2c_board_info_2, ARRAY_SIZE(n810_i2c_board_info_2)); board_serial_init(); gpmc_onenand_init(board_onenand_data); n8x0_mmc_init(); n8x0_usb_init(); }
static int tcm825x_is_upside_down(void) { return machine_is_nokia_n810(); }
static int __init n810_soc_init(void) { int err; struct device *dev; if (!(machine_is_nokia_n810() || machine_is_nokia_n810_wimax())) return -ENODEV; n810_snd_device = platform_device_alloc("soc-audio", -1); if (!n810_snd_device) return -ENOMEM; platform_set_drvdata(n810_snd_device, &n810_snd_devdata); n810_snd_devdata.dev = &n810_snd_device->dev; *(unsigned int *)n810_dai.cpu_dai->private_data = 1; /* McBSP2 */ err = platform_device_add(n810_snd_device); if (err) goto err1; dev = &n810_snd_device->dev; sys_clkout2_src = clk_get(dev, "sys_clkout2_src"); if (IS_ERR(sys_clkout2_src)) { dev_err(dev, "Could not get sys_clkout2_src clock\n"); err = PTR_ERR(sys_clkout2_src); goto err2; } sys_clkout2 = clk_get(dev, "sys_clkout2"); if (IS_ERR(sys_clkout2)) { dev_err(dev, "Could not get sys_clkout2\n"); err = PTR_ERR(sys_clkout2); goto err3; } /* * Configure 12 MHz output on SYS_CLKOUT2. Therefore we must use * 96 MHz as its parent in order to get 12 MHz */ func96m_clk = clk_get(dev, "func_96m_ck"); if (IS_ERR(func96m_clk)) { dev_err(dev, "Could not get func 96M clock\n"); err = PTR_ERR(func96m_clk); goto err4; } clk_set_parent(sys_clkout2_src, func96m_clk); clk_set_rate(sys_clkout2, 12000000); if (gpio_request(N810_HEADSET_AMP_GPIO, "hs_amp") < 0) BUG(); if (gpio_request(N810_SPEAKER_AMP_GPIO, "spk_amp") < 0) BUG(); gpio_direction_output(N810_HEADSET_AMP_GPIO, 0); gpio_direction_output(N810_SPEAKER_AMP_GPIO, 0); return 0; err4: clk_put(sys_clkout2); err3: clk_put(sys_clkout2_src); err2: platform_device_del(n810_snd_device); err1: platform_device_put(n810_snd_device); return err; }
int __init cbus_bus_init(void) { struct cbus_host *chost; int ret; chost = kmalloc(sizeof (*chost), GFP_KERNEL); if (chost == NULL) return -ENOMEM; memset(chost, 0, sizeof (*chost)); spin_lock_init(&chost->lock); /* REVISIT: Pass these from board-*.c files in platform_data */ if (machine_is_nokia770()) { chost->clk_gpio = OMAP_MPUIO(11); chost->dat_gpio = OMAP_MPUIO(10); chost->sel_gpio = OMAP_MPUIO(9); } else if (machine_is_nokia_n800() || machine_is_nokia_n810() || machine_is_nokia_n810_wimax()) { chost->clk_gpio = 66; chost->dat_gpio = 65; chost->sel_gpio = 64; } else { printk(KERN_ERR "cbus: Unsupported board\n"); ret = -ENODEV; goto exit1; } #ifdef CONFIG_ARCH_OMAP1 if (!OMAP_GPIO_IS_MPUIO(chost->clk_gpio) || !OMAP_GPIO_IS_MPUIO(chost->dat_gpio) || !OMAP_GPIO_IS_MPUIO(chost->sel_gpio)) { printk(KERN_ERR "cbus: Only MPUIO pins supported\n"); ret = -ENODEV; goto exit1; } #endif if ((ret = gpio_request(chost->clk_gpio, "CBUS clk")) < 0) goto exit1; if ((ret = gpio_request(chost->dat_gpio, "CBUS data")) < 0) goto exit2; if ((ret = gpio_request(chost->sel_gpio, "CBUS sel")) < 0) goto exit3; gpio_direction_output(chost->clk_gpio, 0); gpio_direction_input(chost->dat_gpio); gpio_direction_output(chost->sel_gpio, 1); gpio_set_value(chost->clk_gpio, 1); gpio_set_value(chost->clk_gpio, 0); cbus_host = chost; return 0; exit3: gpio_free(chost->dat_gpio); exit2: gpio_free(chost->clk_gpio); exit1: kfree(chost); return ret; }
static int __init n810_soc_init(void) { int err; struct device *dev; if (!(machine_is_nokia_n810() || machine_is_nokia_n810_wimax())) return -ENODEV; i2c_register_board_info(1, i2c_device, ARRAY_SIZE(i2c_device)); n810_snd_device = platform_device_alloc("soc-audio", -1); if (!n810_snd_device) return -ENOMEM; platform_set_drvdata(n810_snd_device, &n810_snd_devdata); n810_snd_devdata.dev = &n810_snd_device->dev; *(unsigned int *)n810_dai.cpu_dai->private_data = 1; err = platform_device_add(n810_snd_device); if (err) goto err1; dev = &n810_snd_device->dev; sys_clkout2_src = clk_get(dev, "sys_clkout2_src"); if (IS_ERR(sys_clkout2_src)) { dev_err(dev, "Could not get sys_clkout2_src clock\n"); err = PTR_ERR(sys_clkout2_src); goto err2; } sys_clkout2 = clk_get(dev, "sys_clkout2"); if (IS_ERR(sys_clkout2)) { dev_err(dev, "Could not get sys_clkout2\n"); err = PTR_ERR(sys_clkout2); goto err3; } func96m_clk = clk_get(dev, "func_96m_ck"); if (IS_ERR(func96m_clk)) { dev_err(dev, "Could not get func 96M clock\n"); err = PTR_ERR(func96m_clk); goto err4; } clk_set_parent(sys_clkout2_src, func96m_clk); clk_set_rate(sys_clkout2, 12000000); BUG_ON((gpio_request(N810_HEADSET_AMP_GPIO, "hs_amp") < 0) || (gpio_request(N810_SPEAKER_AMP_GPIO, "spk_amp") < 0)); gpio_direction_output(N810_HEADSET_AMP_GPIO, 0); gpio_direction_output(N810_SPEAKER_AMP_GPIO, 0); return 0; err4: clk_put(sys_clkout2); err3: clk_put(sys_clkout2_src); err2: platform_device_del(n810_snd_device); err1: platform_device_put(n810_snd_device); return err; }