usb: gadget: s3c-hsotg: get phy bus width from phy subsystem
authorMatt Porter <mporter@linaro.org>
Thu, 19 Dec 2013 14:23:07 +0000 (09:23 -0500)
committerFelipe Balbi <balbi@ti.com>
Mon, 23 Dec 2013 20:31:49 +0000 (14:31 -0600)
Adds support for querying the phy bus width from the generic phy
subsystem. Configure UTMI bus width in GUSBCFG based on this value.

Signed-off-by: Matt Porter <mporter@linaro.org>
Acked-by: Kishon Vijay Abraham I <kishon@ti.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
drivers/usb/gadget/s3c-hsotg.c
drivers/usb/gadget/s3c-hsotg.h

index f39daf7a7dce8997a31d34574e08b8e9b27e7957..c0ff1cb91f20691c7887f89a3a648e752ebca4e3 100644 (file)
@@ -146,6 +146,7 @@ struct s3c_hsotg_ep {
  * @regs: The memory area mapped for accessing registers.
  * @irq: The IRQ number we are using
  * @supplies: Definition of USB power supplies
+ * @phyif: PHY interface width
  * @dedicated_fifos: Set if the hardware has dedicated IN-EP fifos.
  * @num_of_eps: Number of available EPs (excluding EP0)
  * @debug_root: root directrory for debugfs.
@@ -174,6 +175,7 @@ struct s3c_hsotg {
 
        struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsotg_supply_names)];
 
+       u32                     phyif;
        unsigned int            dedicated_fifos:1;
        unsigned char           num_of_eps;
 
@@ -2288,7 +2290,7 @@ static void s3c_hsotg_core_init(struct s3c_hsotg *hsotg)
         */
 
        /* set the PLL on, remove the HNP/SRP and set the PHY */
-       writel(GUSBCFG_PHYIf16 | GUSBCFG_TOutCal(7) |
+       writel(hsotg->phyif | GUSBCFG_TOutCal(7) |
               (0x5 << 10), hsotg->regs + GUSBCFG);
 
        s3c_hsotg_init_fifo(hsotg);
@@ -3646,6 +3648,16 @@ static int s3c_hsotg_probe(struct platform_device *pdev)
                goto err_supplies;
        }
 
+       /* Set default UTMI width */
+       hsotg->phyif = GUSBCFG_PHYIf16;
+
+       /*
+        * If using the generic PHY framework, check if the PHY bus
+        * width is 8-bit and set the phyif appropriately.
+        */
+       if (hsotg->phy && (phy_get_bus_width(phy) == 8))
+               hsotg->phyif = GUSBCFG_PHYIf8;
+
        if (hsotg->phy)
                phy_init(hsotg->phy);
 
index d650b12958312dbc0c824bdf106c5887437dedd6..85f549ff8c1fa800497bece709f926fdbd8e7d15 100644 (file)
@@ -55,6 +55,7 @@
 #define GUSBCFG_HNPCap                         (1 << 9)
 #define GUSBCFG_SRPCap                         (1 << 8)
 #define GUSBCFG_PHYIf16                        (1 << 3)
+#define GUSBCFG_PHYIf8                         (0 << 3)
 #define GUSBCFG_TOutCal_MASK                   (0x7 << 0)
 #define GUSBCFG_TOutCal_SHIFT                  (0)
 #define GUSBCFG_TOutCal_LIMIT                  (0x7)