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 int n8x0_mmc_late_init(struct device *dev) { int r, bit, *openp; int vs2sel; mmc_device = dev; r = menelaus_set_slot_sel(1); if (r < 0) return r; if (machine_is_nokia_n800()) vs2sel = 0; else vs2sel = 2; r = menelaus_set_mmc_slot(2, 0, vs2sel, 1); if (r < 0) return r; n8x0_mmc_set_power(dev, 0, MMC_POWER_ON, 16); /* MMC_VDD_28_29 */ n8x0_mmc_set_power(dev, 1, MMC_POWER_ON, 16); r = menelaus_set_mmc_slot(1, 1, 0, 1); if (r < 0) return r; r = menelaus_set_mmc_slot(2, 1, vs2sel, 1); if (r < 0) return r; r = menelaus_get_slot_pin_states(); if (r < 0) return r; if (machine_is_nokia_n800()) { bit = 1 << 1; openp = &slot2_cover_open; } else { bit = 1; openp = &slot1_cover_open; slot2_cover_open = 0; } /* All slot pin bits seem to be inversed until first switch change */ if (r == 0xf || r == (0xf & ~bit)) r = ~r; if (r & bit) *openp = 1; else *openp = 0; r = menelaus_register_mmc_callback(n8x0_mmc_callback, NULL); return r; }
static void n8x0_mmc_callback(void *data, u8 card_mask) { int bit, *openp, index; if (machine_is_nokia_n800()) { bit = 1 << 1; openp = &slot2_cover_open; index = 1; } else { bit = 1; openp = &slot1_cover_open; index = 0; } if (card_mask & bit) *openp = 1; else *openp = 0; #ifdef CONFIG_MMC_OMAP omap_mmc_notify_cover_event(mmc_device, index, *openp); #else pr_warn("MMC: notify cover event not available\n"); #endif }
static int n8x0_mmc_set_power(struct device *dev, int slot, int power_on, int vdd) { if (machine_is_nokia_n800() || slot == 0) return n8x0_mmc_set_power_menelaus(dev, slot, power_on, vdd); n810_set_power_emmc(dev, power_on); return 0; }
static void n8x0_mmc_shutdown(struct device *dev) { int vs2sel; if (machine_is_nokia_n800()) vs2sel = 0; else vs2sel = 2; menelaus_set_mmc_slot(1, 0, 0, 0); menelaus_set_mmc_slot(2, 0, vs2sel, 0); }
static void n8x0_mmc_callback(void *data, u8 card_mask) { int bit, *openp, index; if (machine_is_nokia_n800()) { bit = 1 << 1; openp = &slot2_cover_open; index = 1; } else { bit = 1; openp = &slot1_cover_open; index = 0; } if (card_mask & bit) *openp = 1; else *openp = 0; omap_mmc_notify_cover_event(mmc_device, index, *openp); }
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; }