|
@@ -137,3 +137,116 @@ static struct platform_device *panda_devices[] __initdata = {
|
|
|
&panda_abe_audio,
|
|
|
&panda_hdmi_audio_codec,
|
|
|
&btwilink_device,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct usbhs_omap_board_data usbhs_bdata __initconst = {
|
|
|
+ .port_mode[0] = OMAP_EHCI_PORT_MODE_PHY,
|
|
|
+ .port_mode[1] = OMAP_USBHS_PORT_MODE_UNUSED,
|
|
|
+ .port_mode[2] = OMAP_USBHS_PORT_MODE_UNUSED,
|
|
|
+ .phy_reset = false,
|
|
|
+ .reset_gpio_port[0] = -EINVAL,
|
|
|
+ .reset_gpio_port[1] = -EINVAL,
|
|
|
+ .reset_gpio_port[2] = -EINVAL
|
|
|
+};
|
|
|
+
|
|
|
+static struct gpio panda_ehci_gpios[] __initdata = {
|
|
|
+ { GPIO_HUB_POWER, GPIOF_OUT_INIT_LOW, "hub_power" },
|
|
|
+ { GPIO_HUB_NRESET, GPIOF_OUT_INIT_LOW, "hub_nreset" },
|
|
|
+};
|
|
|
+
|
|
|
+static void __init omap4_ehci_init(void)
|
|
|
+{
|
|
|
+ int ret;
|
|
|
+ struct clk *phy_ref_clk;
|
|
|
+
|
|
|
+ /* FREF_CLK3 provides the 19.2 MHz reference clock to the PHY */
|
|
|
+ phy_ref_clk = clk_get(NULL, "auxclk3_ck");
|
|
|
+ if (IS_ERR(phy_ref_clk)) {
|
|
|
+ pr_err("Cannot request auxclk3\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ clk_set_rate(phy_ref_clk, 19200000);
|
|
|
+ clk_prepare_enable(phy_ref_clk);
|
|
|
+
|
|
|
+ /* disable the power to the usb hub prior to init and reset phy+hub */
|
|
|
+ ret = gpio_request_array(panda_ehci_gpios,
|
|
|
+ ARRAY_SIZE(panda_ehci_gpios));
|
|
|
+ if (ret) {
|
|
|
+ pr_err("Unable to initialize EHCI power/reset\n");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ gpio_export(GPIO_HUB_POWER, 0);
|
|
|
+ gpio_export(GPIO_HUB_NRESET, 0);
|
|
|
+ gpio_set_value(GPIO_HUB_NRESET, 1);
|
|
|
+
|
|
|
+ usbhs_init(&usbhs_bdata);
|
|
|
+
|
|
|
+ /* enable power to hub */
|
|
|
+ gpio_set_value(GPIO_HUB_POWER, 1);
|
|
|
+}
|
|
|
+
|
|
|
+static struct omap_musb_board_data musb_board_data = {
|
|
|
+ .interface_type = MUSB_INTERFACE_UTMI,
|
|
|
+ .mode = MUSB_OTG,
|
|
|
+ .power = 100,
|
|
|
+};
|
|
|
+
|
|
|
+static struct omap2_hsmmc_info mmc[] = {
|
|
|
+ {
|
|
|
+ .mmc = 1,
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .name = "wl1271",
|
|
|
+ .mmc = 5,
|
|
|
+ .caps = MMC_CAP_4_BIT_DATA | MMC_CAP_POWER_OFF_CARD,
|
|
|
+ .gpio_wp = -EINVAL,
|
|
|
+ .gpio_cd = -EINVAL,
|
|
|
+ .ocr_mask = MMC_VDD_165_195,
|
|
|
+ .nonremovable = true,
|
|
|
+ },
|
|
|
+ {} /* Terminator */
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_consumer_supply omap4_panda_vmmc5_supply[] = {
|
|
|
+ REGULATOR_SUPPLY("vmmc", "omap_hsmmc.4"),
|
|
|
+};
|
|
|
+
|
|
|
+static struct regulator_init_data panda_vmmc5 = {
|
|
|
+ .constraints = {
|
|
|
+ .valid_ops_mask = REGULATOR_CHANGE_STATUS,
|
|
|
+ },
|
|
|
+ .num_consumer_supplies = ARRAY_SIZE(omap4_panda_vmmc5_supply),
|
|
|
+ .consumer_supplies = omap4_panda_vmmc5_supply,
|
|
|
+};
|
|
|
+
|
|
|
+static struct fixed_voltage_config panda_vwlan = {
|
|
|
+ .supply_name = "vwl1271",
|
|
|
+ .microvolts = 1800000, /* 1.8V */
|
|
|
+ .gpio = GPIO_WIFI_PMENA,
|
|
|
+ .startup_delay = 70000, /* 70msec */
|
|
|
+ .enable_high = 1,
|
|
|
+ .enabled_at_boot = 0,
|
|
|
+ .init_data = &panda_vmmc5,
|
|
|
+};
|
|
|
+
|
|
|
+static struct platform_device omap_vwlan_device = {
|
|
|
+ .name = "reg-fixed-voltage",
|
|
|
+ .id = 1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &panda_vwlan,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct wl12xx_platform_data omap_panda_wlan_data __initdata = {
|
|
|
+ .board_ref_clock = WL12XX_REFCLOCK_38, /* 38.4 MHz */
|
|
|
+};
|
|
|
+
|
|
|
+static struct twl6040_codec_data twl6040_codec = {
|
|
|
+ /* single-step ramp for headset and handsfree */
|
|
|
+ .hs_left_step = 0x0f,
|
|
|
+ .hs_right_step = 0x0f,
|
|
|
+ .hf_left_step = 0x1d,
|