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;
}
Exemplo n.º 3
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;
}
Exemplo n.º 4
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;
}
Exemplo n.º 7
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;
}
Exemplo n.º 8
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;
}