lkml.org 
[lkml]   [2013]   [Jul]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 2/5] usb: phy: phy-omap-control: Add API to power on/off USB PHY for AM335X
    Date
    Add API to power on/off USB PHY for AM335X. This API will be called
    from phy-amxxxx-usb driver.

    Signed-off-by: George Cherian <george.cherian@ti.com>
    ---
    drivers/usb/phy/phy-omap-control.c | 32 ++++++++++++++++++++++++++++++++
    include/linux/usb/omap_control_usb.h | 11 +++++++++++
    2 files changed, 43 insertions(+)

    diff --git a/drivers/usb/phy/phy-omap-control.c b/drivers/usb/phy/phy-omap-control.c
    index 1419ced..0c1822d 100644
    --- a/drivers/usb/phy/phy-omap-control.c
    +++ b/drivers/usb/phy/phy-omap-control.c
    @@ -46,6 +46,38 @@ struct device *omap_get_control_dev(void)
    EXPORT_SYMBOL_GPL(omap_get_control_dev);

    /**
    + * omap_control_am335x_phy_power - power on/off the serializer using control
    + * module
    + * @dev: the control module device
    + * @on: 0 to off and 1 to on based on powering on or off the PHY
    + * @id: phy id 0 or 1 for phy instance 0 and 1 repectively
    + *
    + * AMXXXX PHY driver should call this API to power on or off the PHY.
    + */
    +void omap_control_am335x_phy_power(struct device *dev, bool on, u8 id)
    +{
    + u32 val;
    + struct omap_control_usb *control_usb = dev_get_drvdata(dev);
    +
    + if (control_usb->type != OMAP_CTRL_DEV_TYPE3)
    + return;
    +
    + val = readl(control_usb->dev_conf + (id * 2));
    +
    + if (on) {
    + val &= ~(AM335X_USBPHY_CM_PWRDN | AM335X_USBPHY_OTG_PWRDN);
    + val |= AM335X_USBPHY_OTGVDET_EN |
    + AM335X_USBPHY_OTGSESSEND_EN;
    + } else
    + val |= AM335X_USBPHY_CM_PWRDN | AM335X_USBPHY_OTG_PWRDN;
    +
    +
    + writel(val, (control_usb->dev_conf + (id * 2)));
    +}
    +EXPORT_SYMBOL_GPL(omap_control_am335x_phy_power);
    +
    +
    +/**
    * omap_control_usb3_phy_power - power on/off the serializer using control
    * module
    * @dev: the control module device
    diff --git a/include/linux/usb/omap_control_usb.h b/include/linux/usb/omap_control_usb.h
    index 27b5b8c..11d7a34 100644
    --- a/include/linux/usb/omap_control_usb.h
    +++ b/include/linux/usb/omap_control_usb.h
    @@ -45,6 +45,7 @@ enum omap_control_usb_mode {
    /* To differentiate ctrl module IP having either mailbox or USB3 PHY power */
    #define OMAP_CTRL_DEV_TYPE1 0x1
    #define OMAP_CTRL_DEV_TYPE2 0x2
    +#define OMAP_CTRL_DEV_TYPE3 0x3

    #define OMAP_CTRL_DEV_PHY_PD BIT(0)

    @@ -63,10 +64,20 @@ enum omap_control_usb_mode {
    #define OMAP_CTRL_USB3_PHY_TX_RX_POWERON 0x3
    #define OMAP_CTRL_USB3_PHY_TX_RX_POWEROFF 0x0

    +#define AM335X_USBPHY_CM_PWRDN (1 << 0)
    +#define AM335X_USBPHY_OTG_PWRDN (1 << 1)
    +#define AM335X_USBPHY_OTGVDET_EN (1 << 19)
    +#define AM335X_USBPHY_OTGSESSEND_EN (1 << 20)
    +#define AM335X_USB0_WKUP_CTRL_ENABLE (1 << 0)
    +#define AM335X_USB1_WKUP_CTRL_ENABLE (1 << 8)
    +
    +
    +
    #if IS_ENABLED(CONFIG_OMAP_CONTROL_USB)
    extern struct device *omap_get_control_dev(void);
    extern void omap_control_usb_phy_power(struct device *dev, int on);
    extern void omap_control_usb3_phy_power(struct device *dev, bool on);
    +extern void omap_control_am335x_phy_power(struct device *dev, bool on, u8 id);
    extern void omap_control_usb_set_mode(struct device *dev,
    enum omap_control_usb_mode mode);
    #else
    --
    1.8.1.4


    \
     
     \ /
      Last update: 2013-07-10 23:12    [W:4.723 / U:0.072 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site