mfd: TWL6030: OMAP4: Registering the TWL6030-usb device
Registering the twl6030-usb transceiver device as a child to twl6030 core. Removed the NOP transceiver init call from board file. Populated twl4030_usb_data platform data structure with the function pointers for OMAP4430 internal PHY operation to be used by twl630-usb driver. Signed-off-by: Hema HK <hemahk@ti.com> Cc: Samuel Ortiz <sameo@linux.intel.com> Cc: Tony Lindgren <tony@atomide.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
@@ -242,6 +242,13 @@ static struct omap_musb_board_data musb_board_data = {
|
|||||||
.power = 100,
|
.power = 100,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct twl4030_usb_data omap4_usbphy_data = {
|
||||||
|
.phy_init = omap4430_phy_init,
|
||||||
|
.phy_exit = omap4430_phy_exit,
|
||||||
|
.phy_power = omap4430_phy_power,
|
||||||
|
.phy_set_clock = omap4430_phy_set_clk,
|
||||||
|
};
|
||||||
|
|
||||||
static struct omap2_hsmmc_info mmc[] = {
|
static struct omap2_hsmmc_info mmc[] = {
|
||||||
{
|
{
|
||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
@@ -461,6 +468,7 @@ static struct twl4030_platform_data sdp4430_twldata = {
|
|||||||
.vaux1 = &sdp4430_vaux1,
|
.vaux1 = &sdp4430_vaux1,
|
||||||
.vaux2 = &sdp4430_vaux2,
|
.vaux2 = &sdp4430_vaux2,
|
||||||
.vaux3 = &sdp4430_vaux3,
|
.vaux3 = &sdp4430_vaux3,
|
||||||
|
.usb = &omap4_usbphy_data
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info __initdata sdp4430_i2c_boardinfo[] = {
|
static struct i2c_board_info __initdata sdp4430_i2c_boardinfo[] = {
|
||||||
@@ -533,9 +541,6 @@ static void __init omap_4430sdp_init(void)
|
|||||||
gpio_direction_output(OMAP4SDP_MDM_PWR_EN_GPIO, 1);
|
gpio_direction_output(OMAP4SDP_MDM_PWR_EN_GPIO, 1);
|
||||||
}
|
}
|
||||||
usb_ehci_init(&ehci_pdata);
|
usb_ehci_init(&ehci_pdata);
|
||||||
|
|
||||||
/* OMAP4 SDP uses internal transceiver so register nop transceiver */
|
|
||||||
usb_nop_xceiv_register();
|
|
||||||
usb_musb_init(&musb_board_data);
|
usb_musb_init(&musb_board_data);
|
||||||
|
|
||||||
status = omap_ethernet_init();
|
status = omap_ethernet_init();
|
||||||
|
@@ -137,6 +137,13 @@ static struct omap_musb_board_data musb_board_data = {
|
|||||||
.power = 100,
|
.power = 100,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct twl4030_usb_data omap4_usbphy_data = {
|
||||||
|
.phy_init = omap4430_phy_init,
|
||||||
|
.phy_exit = omap4430_phy_exit,
|
||||||
|
.phy_power = omap4430_phy_power,
|
||||||
|
.phy_set_clock = omap4430_phy_set_clk,
|
||||||
|
};
|
||||||
|
|
||||||
static struct omap2_hsmmc_info mmc[] = {
|
static struct omap2_hsmmc_info mmc[] = {
|
||||||
{
|
{
|
||||||
.mmc = 1,
|
.mmc = 1,
|
||||||
@@ -345,6 +352,7 @@ static struct twl4030_platform_data omap4_panda_twldata = {
|
|||||||
.vaux1 = &omap4_panda_vaux1,
|
.vaux1 = &omap4_panda_vaux1,
|
||||||
.vaux2 = &omap4_panda_vaux2,
|
.vaux2 = &omap4_panda_vaux2,
|
||||||
.vaux3 = &omap4_panda_vaux3,
|
.vaux3 = &omap4_panda_vaux3,
|
||||||
|
.usb = &omap4_usbphy_data,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct i2c_board_info __initdata omap4_panda_i2c_boardinfo[] = {
|
static struct i2c_board_info __initdata omap4_panda_i2c_boardinfo[] = {
|
||||||
|
@@ -95,7 +95,8 @@
|
|||||||
#define twl_has_rtc() false
|
#define twl_has_rtc() false
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_TWL4030_USB) || defined(CONFIG_TWL4030_USB_MODULE)
|
#if defined(CONFIG_TWL4030_USB) || defined(CONFIG_TWL4030_USB_MODULE) ||\
|
||||||
|
defined(CONFIG_TWL6030_USB) || defined(CONFIG_TWL6030_USB_MODULE)
|
||||||
#define twl_has_usb() true
|
#define twl_has_usb() true
|
||||||
#else
|
#else
|
||||||
#define twl_has_usb() false
|
#define twl_has_usb() false
|
||||||
@@ -682,6 +683,43 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
|
|||||||
usb3v1.dev = child;
|
usb3v1.dev = child;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (twl_has_usb() && pdata->usb && twl_class_is_6030()) {
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply usb3v3 = {
|
||||||
|
.supply = "vusb",
|
||||||
|
};
|
||||||
|
|
||||||
|
if (twl_has_regulator()) {
|
||||||
|
/* this is a template that gets copied */
|
||||||
|
struct regulator_init_data usb_fixed = {
|
||||||
|
.constraints.valid_modes_mask =
|
||||||
|
REGULATOR_MODE_NORMAL
|
||||||
|
| REGULATOR_MODE_STANDBY,
|
||||||
|
.constraints.valid_ops_mask =
|
||||||
|
REGULATOR_CHANGE_MODE
|
||||||
|
| REGULATOR_CHANGE_STATUS,
|
||||||
|
};
|
||||||
|
|
||||||
|
child = add_regulator_linked(TWL6030_REG_VUSB,
|
||||||
|
&usb_fixed, &usb3v3, 1);
|
||||||
|
if (IS_ERR(child))
|
||||||
|
return PTR_ERR(child);
|
||||||
|
}
|
||||||
|
|
||||||
|
child = add_child(0, "twl6030_usb",
|
||||||
|
pdata->usb, sizeof(*pdata->usb),
|
||||||
|
true,
|
||||||
|
/* irq1 = VBUS_PRES, irq0 = USB ID */
|
||||||
|
pdata->irq_base + USBOTG_INTR_OFFSET,
|
||||||
|
pdata->irq_base + USB_PRES_INTR_OFFSET);
|
||||||
|
|
||||||
|
if (IS_ERR(child))
|
||||||
|
return PTR_ERR(child);
|
||||||
|
/* we need to connect regulators to this transceiver */
|
||||||
|
if (twl_has_regulator() && child)
|
||||||
|
usb3v3.dev = child;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (twl_has_watchdog()) {
|
if (twl_has_watchdog()) {
|
||||||
child = add_child(0, "twl4030_wdt", NULL, 0, false, 0, 0);
|
child = add_child(0, "twl4030_wdt", NULL, 0, false, 0, 0);
|
||||||
@@ -815,10 +853,6 @@ add_children(struct twl4030_platform_data *pdata, unsigned long features)
|
|||||||
if (IS_ERR(child))
|
if (IS_ERR(child))
|
||||||
return PTR_ERR(child);
|
return PTR_ERR(child);
|
||||||
|
|
||||||
child = add_regulator(TWL6030_REG_VUSB, pdata->vusb);
|
|
||||||
if (IS_ERR(child))
|
|
||||||
return PTR_ERR(child);
|
|
||||||
|
|
||||||
child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1);
|
child = add_regulator(TWL6030_REG_VAUX1_6030, pdata->vaux1);
|
||||||
if (IS_ERR(child))
|
if (IS_ERR(child))
|
||||||
return PTR_ERR(child);
|
return PTR_ERR(child);
|
||||||
|
@@ -593,6 +593,13 @@ enum twl4030_usb_mode {
|
|||||||
|
|
||||||
struct twl4030_usb_data {
|
struct twl4030_usb_data {
|
||||||
enum twl4030_usb_mode usb_mode;
|
enum twl4030_usb_mode usb_mode;
|
||||||
|
|
||||||
|
int (*phy_init)(struct device *dev);
|
||||||
|
int (*phy_exit)(struct device *dev);
|
||||||
|
/* Power on/off the PHY */
|
||||||
|
int (*phy_power)(struct device *dev, int iD, int on);
|
||||||
|
/* enable/disable phy clocks */
|
||||||
|
int (*phy_set_clock)(struct device *dev, int on);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct twl4030_ins {
|
struct twl4030_ins {
|
||||||
|
Reference in New Issue
Block a user