static int __init board_wifi_init(void) { const struct archos_wifi_bt_dev_conf *conf_ptr; conf_ptr = hwrev_ptr(&board_wifi_bt_config, system_rev); if (IS_ERR(conf_ptr)) return -EINVAL; /* bt */ wilink_pdata.nshutdown_gpio = conf_ptr->bt_power; remux_regulator_gpio(conf_ptr->bt_power); /* wifi */ if (conf_ptr->wifi_irq_signal) omap_mux_init_signal(conf_ptr->wifi_irq_signal, OMAP_PIN_INPUT); else omap_mux_init_gpio(conf_ptr->wifi_irq, OMAP_PIN_INPUT); board_wlan_data.irq = OMAP_GPIO_IRQ(conf_ptr->wifi_irq); if (conf_ptr->wifi_power_signal) omap_mux_init_signal(conf_ptr->wifi_power_signal, OMAP_PIN_OUTPUT); else omap_mux_init_gpio(conf_ptr->wifi_power, OMAP_PIN_OUTPUT); board_vwlan.gpio = conf_ptr->wifi_power; board_wifi_mux_init(); if (wl12xx_set_platform_data(&board_wlan_data)) pr_err("Error setting wl12xx data\n"); platform_device_register(&board_vwlan_device); return 0; }
static __init int archos_hdmi_init(void) { u32 r; const struct archos_disp_conf *conf; conf = hwrev_ptr(&display_config, system_rev); if (IS_ERR(conf)) return -ENODEV; omap_mux_init_signal("hdmi_hpd", OMAP_PIN_INPUT); omap_mux_init_signal("hdmi_cec", OMAP_PIN_INPUT); omap_mux_init_signal("hdmi_ddc_scl", OMAP_PIN_INPUT); omap_mux_init_signal("hdmi_ddc_sda", OMAP_PIN_INPUT); /* strong pullup on DDC lines using unpublished register */ r = ((1 << 24) | (1 << 28)) ; omap4_ctrl_pad_writel(r, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_I2C_1); gpio_request(HDMI_GPIO_HPD, "hdmi_hpd"); omap_mux_init_gpio(HDMI_GPIO_HPD, OMAP_PIN_INPUT_PULLDOWN); gpio_direction_input(HDMI_GPIO_HPD); fixed_reg_hdmi_5v.gpio = conf->hdmi_pwr; if (platform_device_register(&fixed_supply_hdmi_5v) < 0) { pr_err("Error registering hdmi 5V regulator\n"); return -1; } return 0; }
int __init panel_auo_wxga_10_init(struct omap_dss_device *disp_data) { const struct archos_display_config *disp_cfg; const struct archos_disp_conf * conf; int ret = -ENODEV; pr_debug("panel_auo_wxga_10_init\n"); disp_cfg = omap_get_config( ARCHOS_TAG_DISPLAY, struct archos_display_config ); conf = hwrev_ptr(disp_cfg, system_rev); if (IS_ERR(conf)) { pr_info("panel_auo_wxga_10_init: no configuration for system_rev %i\n", system_rev); return ret; } display_gpio = *conf; if (IS_ERR_VALUE(platform_device_register(&lcd_device))) pr_info("%s: cannot register lcd_panel device\n", __func__); if (conf->do_gamma_fix) { gamma_tab_init(gamma_table); auo_wxga_10_dss_device.phy.dpi.gamma_correction = gamma_table; } *disp_data = auo_wxga_10_dss_device; if (conf->do_not_use_pll) disp_data->clocks.dispc.dispc_fclk_src = disp_data->clocks.dispc.channel.lcd_clk_src = OMAP_DSS_CLK_SRC_FCK; have_panel = true; return 0; }
int __init panel_virtual_init(struct omap_dss_device *disp_data) { const struct archos_display_config *disp_cfg; const struct archos_disp_conf * conf; int ret = -ENODEV; pr_debug("panel_virtual_init\n"); disp_cfg = omap_get_config( ARCHOS_TAG_DISPLAY, struct archos_display_config ); conf = hwrev_ptr(disp_cfg, system_rev); if (IS_ERR(conf)) return ret; if (IS_ERR_VALUE(platform_device_register(&lcd_device))) pr_info("%s: cannot register lcd_panel device\n", __func__); *disp_data = virtual_dss_device; if (conf->do_not_use_pll) { disp_data->clocks.dispc.dispc_fclk_src = disp_data->clocks.dispc.channel.lcd_clk_src = OMAP_DSS_CLK_SRC_FCK; disp_data->data = &virtual_720p_panel; } return 0; }
static __init int archos_hsusb_ext_regulator_init(void) { const struct archos_3g_conf *conf; conf = hwrev_ptr(&usb_3g_config, system_rev); if (IS_ERR(conf)) return -EINVAL; hsusb_ext_supply_config.gpio = conf->enable; if (platform_device_register(&hsusb_ext_supply) < 0) { pr_err("Error registering 5V regulator of external hsusb\n"); return -1; } return 0; }
static __init int archos_hub_vcc_regulator_init(void) { const struct archos_usb_conf *conf; conf = hwrev_ptr(&usb_config, system_rev); if (IS_ERR(conf)) return -EINVAL; if (!gpio_is_valid(conf->enable_usb_hub)) return -ENODEV; fixed_reg_hub_vcc.gpio = conf->enable_usb_hub; if (platform_device_register(&fixed_supply_hub_vcc) < 0) { pr_err("Error registering USB HUB regulator\n"); } return 0; }
int __init archos_touchscreen_tr16c0_init(struct tr16c0_platform_data *pdata) { const struct archos_i2c_tsp_config *tsp_config; const struct archos_i2c_tsp_conf *conf; int ret; tsp_config = omap_get_config(ARCHOS_TAG_I2C_TSP, struct archos_i2c_tsp_config); conf = hwrev_ptr(tsp_config, system_rev); if (IS_ERR(conf)) { pr_err("%s: no device configuration for system_rev %i\n", __FUNCTION__, system_rev); return -ENODEV; } if (gpio_is_valid(conf->pwr_gpio)) { if (conf->pwr_signal) { omap_mux_init_signal(conf->pwr_signal, PIN_OUTPUT); } else { omap_mux_init_gpio(conf->pwr_gpio, PIN_OUTPUT); } // archos tsps are on i2c bus 3 on omap3, supply needs to match that. if (cpu_is_omap3630()) { fixed_reg_tsp_vcc_initdata.consumer_supplies = tsp_vcc_consumer_o3; fixed_reg_tsp_vcc_initdata.num_consumer_supplies = ARRAY_SIZE(tsp_vcc_consumer_o3); } fixed_reg_tsp_vcc.gpio = conf->pwr_gpio; ret = platform_device_register(&fixed_supply_tsp_vcc); if (ret) { pr_err("%s: could not register tsp regulator.\n", __func__); return ret; } } else { pr_err("%s: ts pwron gpio is not valid.\n", __func__); return -ENODEV; } if (gpio_is_valid(conf->shtdwn_gpio)) { reset_gpio = conf->shtdwn_gpio; ret = gpio_request(reset_gpio, "tr16c0_ts_rst"); if (ret) { pr_err("%s : could not request shutdown gpio %d", __func__, reset_gpio); return ret; } gpio_direction_output(reset_gpio, 0); if (conf->shtdwn_signal) { omap_mux_init_signal(conf->shtdwn_signal, PIN_OUTPUT); } else { omap_mux_init_gpio(conf->shtdwn_gpio, PIN_OUTPUT); } gpio_export(reset_gpio, false); gpio_set_value(reset_gpio, 0); } else { pr_err("%s: ts reset gpio is not valid.\n", __func__); return -ENODEV; } if (gpio_is_valid(conf->irq_gpio)) { irq_gpio = conf->irq_gpio; ret = gpio_request(irq_gpio, "tr16c0_ts_irq"); if (ret) { pr_err("%s : could not request irq gpio %d\n", __func__, irq_gpio); return ret; } gpio_direction_input(irq_gpio); if (conf->irq_signal) omap_mux_init_signal(conf->irq_signal, OMAP_PIN_INPUT | OMAP_PIN_OFF_WAKEUPENABLE); else omap_mux_init_gpio(irq_gpio, OMAP_PIN_INPUT | OMAP_PIN_OFF_WAKEUPENABLE); gpio_export(irq_gpio, false); pdata->irq = gpio_to_irq(irq_gpio); } else { pr_err("%s: ts irq gpio is not valid.\n", __func__); return -ENODEV; } pdata->reset = &tr16c0_archos_reset; pdata->get_irq_level = &tr16c0_archos_get_irq_level; pdata->regulator = fixed_reg_tsp_vcc_initdata.consumer_supplies[0].supply; if (!cpu_is_omap3630()) pdata->demux_i2c = &tr16c0_archos_demux_i2c; pr_debug("%s: irq_gpio %d - irq %d, reset_gpio %d, pwr_gpio %d\n", __func__, pdata->irq, conf->irq_gpio, conf->shtdwn_gpio, conf->pwr_gpio); return 0; }
int __init archos_touchscreen_byd_init(struct byd_platform_data *pdata) { const struct archos_i2c_tsp_config *tsp_config; const struct archos_i2c_tsp_conf *conf; int ret; tsp_config = omap_get_config(ARCHOS_TAG_I2C_TSP, struct archos_i2c_tsp_config); conf = hwrev_ptr(tsp_config, system_rev); if (IS_ERR(conf)) { pr_err("%s: no device configuration for system revision %i\n", __FUNCTION__, system_rev); return -ENODEV; } if (gpio_is_valid(conf->pwr_gpio)) { if (conf->pwr_signal) { omap_mux_init_signal(conf->pwr_signal, PIN_OUTPUT); } else { omap_mux_init_gpio(conf->pwr_gpio, PIN_OUTPUT); } fixed_reg_tsp_vcc.gpio = conf->pwr_gpio; platform_device_register(&fixed_supply_tsp_vcc); } else { pr_err("%s: ts pwron gpio is not valid.\n", __FUNCTION__); return -ENODEV; } if (gpio_is_valid(conf->shtdwn_gpio)) { reset_gpio = conf->shtdwn_gpio; ret = gpio_request(reset_gpio, "byd_ts_rst"); if (ret) { pr_err("%s : could not request shutdown gpio %d", __func__, reset_gpio); return ret; } gpio_direction_output(reset_gpio, 0); gpio_export(reset_gpio, false); gpio_set_value(reset_gpio, 0); } else { pr_err("%s: ts reset gpio is not valid.\n", __func__); return -ENODEV; } if (gpio_is_valid(conf->irq_gpio)) { irq_gpio = conf->irq_gpio; ret = gpio_request(conf->irq_gpio, "byd_ts_irq"); if (!ret) { gpio_direction_input(conf->irq_gpio); if (conf->irq_signal) omap_mux_init_signal(conf->irq_signal, OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); else omap_mux_init_gpio(conf->irq_gpio, OMAP_PIN_INPUT_PULLUP | OMAP_PIN_OFF_WAKEUPENABLE); gpio_export(conf->irq_gpio, false); } else { pr_err("%s : could not request irq gpio %d\n", __FUNCTION__, conf->irq_gpio); return ret; } if (conf->irq_gpio!= -1) { pdata->irq = gpio_to_irq(conf->irq_gpio); } else { pdata->irq = -1; } } else { pr_err("%s: ts irq gpio is not valid.\n", __FUNCTION__); return -ENODEV; } pdata->reset = &byd_archos_reset; pdata->get_irq_level = byd_archos_get_irq_level; pdata->regulator = tsp_vcc_consumer[0].supply; pr_debug("%s: irq_gpio %d - irq %d, pwr_gpio %d\n", __FUNCTION__, pdata->irq, conf->irq_gpio, conf->pwr_gpio); return 0; }