static void __init beagle_opp_init(void) { int r = 0; /* Initialize the omap3 opp table */ if (omap3_opp_init()) { pr_err("%s: opp default init failed\n", __func__); return; } /* Custom OPP enabled for XM */ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM || omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC) { struct omap_hwmod *mh = omap_hwmod_lookup("mpu"); struct omap_hwmod *dh = omap_hwmod_lookup("iva"); struct device *dev; if (!mh || !dh) { pr_err("%s: Aiee.. no mpu/dsp devices? %p %p\n", __func__, mh, dh); r = -EINVAL; } else { /* Enable MPU 1GHz and lower opps */ dev = &mh->od->pdev.dev; r = opp_enable(dev, 800000000); r |= opp_enable(dev, 1000000000); /* Enable IVA 800MHz and lower opps */ dev = &dh->od->pdev.dev; r |= opp_enable(dev, 660000000); r |= opp_enable(dev, 800000000); } if (r) { pr_err("%s: failed to enable higher opp %d\n", __func__, r); /* * Cleanup - disable the higher freqs - we dont care * about the results */ dev = &mh->od->pdev.dev; opp_disable(dev, 800000000); opp_disable(dev, 1000000000); dev = &dh->od->pdev.dev; opp_disable(dev, 660000000); opp_disable(dev, 800000000); } else { pr_err("%s: turbo OPPs enabled!\n", __func__); } } }
static void __init beagle_display_init(void) { int r; /* DVI reset GPIO is different between beagle revisions */ if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)) beagle_dvi_device.reset_gpio = 129; else beagle_dvi_device.reset_gpio = 170; r = gpio_request(beagle_dvi_device.reset_gpio, "DVI reset"); if (r < 0) { printk(KERN_ERR "Unable to get DVI reset GPIO\n"); return; } gpio_direction_output(beagle_dvi_device.reset_gpio, 0); }
static int beagle_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio) { if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { mmc[0].gpio_wp = -EINVAL; } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) { omap_mux_init_gpio(23, OMAP_PIN_INPUT); mmc[0].gpio_wp = 23; } else { omap_mux_init_gpio(29, OMAP_PIN_INPUT); } /* gpio + 0 is "mmc0_cd" (input/IRQ) */ mmc[0].gpio_cd = gpio + 0; omap2_hsmmc_init(mmc); /* link regulators to MMC adapters */ beagle_vmmc1_supply.dev = mmc[0].dev; beagle_vsim_supply.dev = mmc[0].dev; /* REVISIT: need ehci-omap hooks for external VBUS * power switch and overcurrent detect */ gpio_request(gpio + 1, "EHCI_nOC"); gpio_direction_input(gpio + 1); /* TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, active low) */ gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; return 0; }
static int beagle_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio) { int r; if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)) { mmc[0].gpio_wp = -EINVAL; } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) { omap_mux_init_gpio(23, OMAP_PIN_INPUT); mmc[0].gpio_wp = 23; } else { omap_mux_init_gpio(29, OMAP_PIN_INPUT); } /* gpio + 0 is "mmc0_cd" (input/IRQ) */ mmc[0].gpio_cd = gpio + 0; omap2_hsmmc_init(mmc); /* link regulators to MMC adapters */ beagle_vmmc1_supply.dev = mmc[0].dev; beagle_vsim_supply.dev = mmc[0].dev; /* REVISIT: need ehci-omap hooks for external VBUS * power switch and overcurrent detect */ if ((omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XM) && (omap3_beagle_get_rev() != OMAP3BEAGLE_BOARD_XMC)) { r = gpio_request(gpio + 1, "EHCI_nOC"); if (!r) { r = gpio_direction_input(gpio + 1); if (r) gpio_free(gpio + 1); } if (r) pr_err("%s: unable to configure EHCI_nOC\n", __func__); } /* * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active * high / others active low) */ gpio_request(gpio + TWL4030_GPIO_MAX, "nEN_USB_PWR"); if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) gpio_direction_output(gpio + TWL4030_GPIO_MAX, 1); else gpio_direction_output(gpio + TWL4030_GPIO_MAX, 0); /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; /* * gpio + 1 on Xm controls the TFP410's enable line (active low) * gpio + 2 control varies depending on the board rev as follows: * P7/P8 revisions(prototype): Camera EN * A2+ revisions (production): LDO (supplies DVI, serial, led blocks) */ if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XMC)) { r = gpio_request(gpio + 1, "nDVI_PWR_EN"); if (!r) { r = gpio_direction_output(gpio + 1, 0); if (r) gpio_free(gpio + 1); } if (r) pr_err("%s: unable to configure nDVI_PWR_EN\n", __func__); r = gpio_request(gpio + 2, "DVI_LDO_EN"); if (!r) { r = gpio_direction_output(gpio + 2, 1); if (r) gpio_free(gpio + 2); } if (r) pr_err("%s: unable to configure DVI_LDO_EN\n", __func__); } return 0; }
static int beagle_twl_gpio_setup(struct device *dev, unsigned gpio, unsigned ngpio) { int r, usb_pwr_level; if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { mmc[0].gpio_wp = -EINVAL; } else if ((omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C1_3) || (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_C4)) { omap_mux_init_gpio(23, OMAP_PIN_INPUT); mmc[0].gpio_wp = 23; } else { omap_mux_init_gpio(29, OMAP_PIN_INPUT); } /* gpio + 0 is "mmc0_cd" (input/IRQ) */ mmc[0].gpio_cd = gpio + 0; omap2_hsmmc_init(mmc); /* link regulators to MMC adapters */ beagle_vmmc1_supply.dev = mmc[0].dev; beagle_vsim_supply.dev = mmc[0].dev; /* * TWL4030_GPIO_MAX + 0 == ledA, EHCI nEN_USB_PWR (out, XM active * high / others active low) * DVI reset GPIO is different between beagle revisions */ if (omap3_beagle_get_rev() == OMAP3BEAGLE_BOARD_XM) { usb_pwr_level = GPIOF_OUT_INIT_HIGH; beagle_dvi_device.reset_gpio = 129; /* * gpio + 1 on Xm controls the TFP410's enable line (active low) * gpio + 2 control varies depending on the board rev as below: * P7/P8 revisions(prototype): Camera EN * A2+ revisions (production): LDO (DVI, serial, led blocks) */ r = gpio_request_one(gpio + 1, GPIOF_OUT_INIT_LOW, "nDVI_PWR_EN"); if (r) pr_err("%s: unable to configure nDVI_PWR_EN\n", __func__); r = gpio_request_one(gpio + 2, GPIOF_OUT_INIT_HIGH, "DVI_LDO_EN"); if (r) pr_err("%s: unable to configure DVI_LDO_EN\n", __func__); } else { usb_pwr_level = GPIOF_OUT_INIT_LOW; beagle_dvi_device.reset_gpio = 170; /* * REVISIT: need ehci-omap hooks for external VBUS * power switch and overcurrent detect */ if (gpio_request_one(gpio + 1, GPIOF_IN, "EHCI_nOC")) pr_err("%s: unable to configure EHCI_nOC\n", __func__); } gpio_request_one(gpio + TWL4030_GPIO_MAX, usb_pwr_level, "nEN_USB_PWR"); /* TWL4030_GPIO_MAX + 1 == ledB, PMU_STAT (out, active low LED) */ gpio_leds[2].gpio = gpio + TWL4030_GPIO_MAX + 1; return 0; }