2015-08-25 11:04:42

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 0/5] usb: common and dwc3: converting to unified device property

Hi,

While converting dwc3 to the unified device property interface, I
noticed that there is really nothing preventing of_usb_get_dr_mode and
of_usb_get_maximum_speed from being converted as well. Hope that's OK.

The only special case was dwc3-st.c, where the dr_mode is requested
before the platform device has been populated. I changed it so that
the dr_mode property is requested after the platform device is
populated in a separate patch.


Heikki Krogerus (5):
usb: common: of_usb_get_maximum_speed to usb_get_maximum_speed
usb: dwc3: st: prepare the driver for generic usb_get_dr_mode function
usb: common: of_usb_get_dr_mode to usb_get_dr_mode
usb: dwc3: core: convert to unified device property interface
usb: dwc3: pci: passing forward the ACPI companion

drivers/usb/chipidea/core.c | 4 +--
drivers/usb/common/common.c | 59 +++++++++++++++--------------------------
drivers/usb/dwc2/platform.c | 2 +-
drivers/usb/dwc3/core.c | 50 +++++++++++++++++-----------------
drivers/usb/dwc3/dwc3-pci.c | 1 +
drivers/usb/dwc3/dwc3-st.c | 12 +++++++--
drivers/usb/musb/musb_dsps.c | 2 +-
drivers/usb/musb/sunxi.c | 2 +-
drivers/usb/phy/phy-msm-usb.c | 2 +-
drivers/usb/phy/phy-tegra-usb.c | 2 +-
include/linux/usb/ch9.h | 11 +++++++-
include/linux/usb/of.h | 12 ---------
include/linux/usb/otg.h | 9 +++++++
13 files changed, 84 insertions(+), 84 deletions(-)

--
2.5.0


2015-08-25 11:04:45

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 1/5] usb: common: of_usb_get_maximum_speed to usb_get_maximum_speed

By using the unified device property interface, the function
can be made available for all platforms and not just the
ones using DT.

Signed-off-by: Heikki Krogerus <[email protected]>
---
drivers/usb/chipidea/core.c | 2 +-
drivers/usb/common/common.c | 44 ++++++++++++++++++--------------------------
drivers/usb/dwc3/core.c | 3 ++-
include/linux/usb/ch9.h | 11 ++++++++++-
include/linux/usb/of.h | 6 ------
5 files changed, 31 insertions(+), 35 deletions(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index 3feebf7..ce71532 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -648,7 +648,7 @@ static int ci_get_platdata(struct device *dev,
return ret;
}

- if (of_usb_get_maximum_speed(dev->of_node) == USB_SPEED_FULL)
+ if (usb_get_maximum_speed(dev) == USB_SPEED_FULL)
platdata->flags |= CI_HDRC_FORCE_FULLSPEED;

platdata->itc_setting = 1;
diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index 9e39286..b25a111 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -60,6 +60,24 @@ const char *usb_speed_string(enum usb_device_speed speed)
}
EXPORT_SYMBOL_GPL(usb_speed_string);

+enum usb_device_speed usb_get_maximum_speed(struct device *dev)
+{
+ const char *maximum_speed;
+ int err;
+ int i;
+
+ err = device_property_read_string(dev, "maximum-speed", &maximum_speed);
+ if (err < 0)
+ return USB_SPEED_UNKNOWN;
+
+ for (i = 0; i < ARRAY_SIZE(speed_names); i++)
+ if (strcmp(maximum_speed, speed_names[i]) == 0)
+ return i;
+
+ return USB_SPEED_UNKNOWN;
+}
+EXPORT_SYMBOL_GPL(usb_get_maximum_speed);
+
const char *usb_state_string(enum usb_device_state state)
{
static const char *const names[] = {
@@ -114,32 +132,6 @@ enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
EXPORT_SYMBOL_GPL(of_usb_get_dr_mode);

/**
- * of_usb_get_maximum_speed - Get maximum requested speed for a given USB
- * controller.
- * @np: Pointer to the given device_node
- *
- * The function gets the maximum speed string from property "maximum-speed",
- * and returns the corresponding enum usb_device_speed.
- */
-enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np)
-{
- const char *maximum_speed;
- int err;
- int i;
-
- err = of_property_read_string(np, "maximum-speed", &maximum_speed);
- if (err < 0)
- return USB_SPEED_UNKNOWN;
-
- for (i = 0; i < ARRAY_SIZE(speed_names); i++)
- if (strcmp(maximum_speed, speed_names[i]) == 0)
- return i;
-
- return USB_SPEED_UNKNOWN;
-}
-EXPORT_SYMBOL_GPL(of_usb_get_maximum_speed);
-
-/**
* of_usb_host_tpl_support - to get if Targeted Peripheral List is supported
* for given targeted hosts (non-PC hosts)
* @np: Pointer to the given device_node
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 064123e..9694799 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -842,8 +842,9 @@ static int dwc3_probe(struct platform_device *pdev)
*/
hird_threshold = 12;

+ dwc->maximum_speed = usb_get_maximum_speed(dev);
+
if (node) {
- dwc->maximum_speed = of_usb_get_maximum_speed(node);
dwc->has_lpm_erratum = of_property_read_bool(node,
"snps,has-lpm-erratum");
of_property_read_u8(node, "snps,lpm-nyet-threshold",
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 27603bc..6cc96bb 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -32,9 +32,9 @@
#ifndef __LINUX_USB_CH9_H
#define __LINUX_USB_CH9_H

+#include <linux/device.h>
#include <uapi/linux/usb/ch9.h>

-
/**
* usb_speed_string() - Returns human readable-name of the speed.
* @speed: The speed to return human-readable name for. If it's not
@@ -43,6 +43,15 @@
*/
extern const char *usb_speed_string(enum usb_device_speed speed);

+/**
+ * usb_get_maximum_speed - Get maximum requested speed for a given USB
+ * controller.
+ * @dev: Pointer to the given USB controller device
+ *
+ * The function gets the maximum speed string from property "maximum-speed",
+ * and returns the corresponding enum usb_device_speed.
+ */
+extern enum usb_device_speed usb_get_maximum_speed(struct device *dev);

/**
* usb_state_string - Returns human readable name for the state.
diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index 8c5a818..ff23fea 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -13,7 +13,6 @@

#if IS_ENABLED(CONFIG_OF)
enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np);
-enum usb_device_speed of_usb_get_maximum_speed(struct device_node *np);
bool of_usb_host_tpl_support(struct device_node *np);
int of_usb_update_otg_caps(struct device_node *np,
struct usb_otg_caps *otg_caps);
@@ -23,11 +22,6 @@ static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
return USB_DR_MODE_UNKNOWN;
}

-static inline enum usb_device_speed
-of_usb_get_maximum_speed(struct device_node *np)
-{
- return USB_SPEED_UNKNOWN;
-}
static inline bool of_usb_host_tpl_support(struct device_node *np)
{
return false;
--
2.5.0

2015-08-25 11:04:50

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 2/5] usb: dwc3: st: prepare the driver for generic usb_get_dr_mode function

of_usb_get_dr_mode will be converted into more generic
usb_get_dr_mode function that will take struct device
instead of struct device_node as it's parameter.

To make the conversion possible later, waiting for the
platform device for dwc3 to be populated before calling
of_usb_get_dr_mode.

Signed-off-by: Heikki Krogerus <[email protected]>
CC: Giuseppe Cavallaro <[email protected]>
CC: Peter Griffin <[email protected]>
---
drivers/usb/dwc3/dwc3-st.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/usb/dwc3/dwc3-st.c b/drivers/usb/dwc3/dwc3-st.c
index de4d52f..02d47d5 100644
--- a/drivers/usb/dwc3/dwc3-st.c
+++ b/drivers/usb/dwc3/dwc3-st.c
@@ -195,6 +195,7 @@ static int st_dwc3_probe(struct platform_device *pdev)
struct resource *res;
struct device *dev = &pdev->dev;
struct device_node *node = dev->of_node, *child;
+ struct platform_device *child_pdev;
struct regmap *regmap;
int ret;

@@ -253,8 +254,6 @@ static int st_dwc3_probe(struct platform_device *pdev)
goto undo_softreset;
}

- dwc3_data->dr_mode = of_usb_get_dr_mode(child);
-
/* Allocate and initialize the core */
ret = of_platform_populate(node, NULL, NULL, dev);
if (ret) {
@@ -262,6 +261,15 @@ static int st_dwc3_probe(struct platform_device *pdev)
goto undo_softreset;
}

+ child_pdev = of_find_device_by_node(child);
+ if (!child_pdev) {
+ dev_err(dev, "failed to find dwc3 core device\n");
+ ret = -ENODEV;
+ goto undo_softreset;
+ }
+
+ dwc3_data->dr_mode = of_usb_get_dr_mode(child_pdev->dev.of_node);
+
/*
* Configure the USB port as device or host according to the static
* configuration passed from DT.
--
2.5.0

2015-08-25 11:05:25

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 3/5] usb: common: of_usb_get_dr_mode to usb_get_dr_mode

By using the unified device property interface, the function
can be made available for all platforms and not just the
ones using DT.

Signed-off-by: Heikki Krogerus <[email protected]>
---
drivers/usb/chipidea/core.c | 2 +-
drivers/usb/common/common.c | 15 ++++-----------
drivers/usb/dwc2/platform.c | 2 +-
drivers/usb/dwc3/core.c | 2 +-
drivers/usb/dwc3/dwc3-st.c | 2 +-
drivers/usb/musb/musb_dsps.c | 2 +-
drivers/usb/musb/sunxi.c | 2 +-
drivers/usb/phy/phy-msm-usb.c | 2 +-
drivers/usb/phy/phy-tegra-usb.c | 2 +-
include/linux/usb/of.h | 6 ------
include/linux/usb/otg.h | 9 +++++++++
11 files changed, 21 insertions(+), 25 deletions(-)

diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
index ce71532..bf25997 100644
--- a/drivers/usb/chipidea/core.c
+++ b/drivers/usb/chipidea/core.c
@@ -611,7 +611,7 @@ static int ci_get_platdata(struct device *dev,
platdata->phy_mode = of_usb_get_phy_mode(dev->of_node);

if (!platdata->dr_mode)
- platdata->dr_mode = of_usb_get_dr_mode(dev->of_node);
+ platdata->dr_mode = usb_get_dr_mode(dev);

if (platdata->dr_mode == USB_DR_MODE_UNKNOWN)
platdata->dr_mode = USB_DR_MODE_OTG;
diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
index b25a111..673d530 100644
--- a/drivers/usb/common/common.c
+++ b/drivers/usb/common/common.c
@@ -99,7 +99,6 @@ const char *usb_state_string(enum usb_device_state state)
}
EXPORT_SYMBOL_GPL(usb_state_string);

-#ifdef CONFIG_OF
static const char *const usb_dr_modes[] = {
[USB_DR_MODE_UNKNOWN] = "",
[USB_DR_MODE_HOST] = "host",
@@ -107,19 +106,12 @@ static const char *const usb_dr_modes[] = {
[USB_DR_MODE_OTG] = "otg",
};

-/**
- * of_usb_get_dr_mode - Get dual role mode for given device_node
- * @np: Pointer to the given device_node
- *
- * The function gets phy interface string from property 'dr_mode',
- * and returns the correspondig enum usb_dr_mode
- */
-enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
+enum usb_dr_mode usb_get_dr_mode(struct device *dev)
{
const char *dr_mode;
int err, i;

- err = of_property_read_string(np, "dr_mode", &dr_mode);
+ err = device_property_read_string(dev, "dr_mode", &dr_mode);
if (err < 0)
return USB_DR_MODE_UNKNOWN;

@@ -129,8 +121,9 @@ enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)

return USB_DR_MODE_UNKNOWN;
}
-EXPORT_SYMBOL_GPL(of_usb_get_dr_mode);
+EXPORT_SYMBOL_GPL(usb_get_dr_mode);

+#ifdef CONFIG_OF
/**
* of_usb_host_tpl_support - to get if Targeted Peripheral List is supported
* for given targeted hosts (non-PC hosts)
diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
index 9093530..73bb75d 100644
--- a/drivers/usb/dwc2/platform.c
+++ b/drivers/usb/dwc2/platform.c
@@ -220,7 +220,7 @@ static int dwc2_driver_probe(struct platform_device *dev)
dev_dbg(&dev->dev, "mapped PA %08lx to VA %p\n",
(unsigned long)res->start, hsotg->regs);

- hsotg->dr_mode = of_usb_get_dr_mode(dev->dev.of_node);
+ hsotg->dr_mode = usb_get_dr_mode(&dev->dev);

/*
* Attempt to find a generic PHY, then look for an old style
diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 9694799..8a76b39 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -843,6 +843,7 @@ static int dwc3_probe(struct platform_device *pdev)
hird_threshold = 12;

dwc->maximum_speed = usb_get_maximum_speed(dev);
+ dwc->dr_mode = usb_get_dr_mode(dev);

if (node) {
dwc->has_lpm_erratum = of_property_read_bool(node,
@@ -858,7 +859,6 @@ static int dwc3_probe(struct platform_device *pdev)

dwc->needs_fifo_resize = of_property_read_bool(node,
"tx-fifo-resize");
- dwc->dr_mode = of_usb_get_dr_mode(node);

dwc->disable_scramble_quirk = of_property_read_bool(node,
"snps,disable_scramble_quirk");
diff --git a/drivers/usb/dwc3/dwc3-st.c b/drivers/usb/dwc3/dwc3-st.c
index 02d47d5..5c0adb9 100644
--- a/drivers/usb/dwc3/dwc3-st.c
+++ b/drivers/usb/dwc3/dwc3-st.c
@@ -268,7 +268,7 @@ static int st_dwc3_probe(struct platform_device *pdev)
goto undo_softreset;
}

- dwc3_data->dr_mode = of_usb_get_dr_mode(child_pdev->dev.of_node);
+ dwc3_data->dr_mode = usb_get_dr_mode(&child_pdev->dev);

/*
* Configure the USB port as device or host according to the static
diff --git a/drivers/usb/musb/musb_dsps.c b/drivers/usb/musb/musb_dsps.c
index a0cfead..2f9b636 100644
--- a/drivers/usb/musb/musb_dsps.c
+++ b/drivers/usb/musb/musb_dsps.c
@@ -663,7 +663,7 @@ static int get_musb_port_mode(struct device *dev)
{
enum usb_dr_mode mode;

- mode = of_usb_get_dr_mode(dev->of_node);
+ mode = usb_get_dr_mode(dev);
switch (mode) {
case USB_DR_MODE_HOST:
return MUSB_PORT_MODE_HOST;
diff --git a/drivers/usb/musb/sunxi.c b/drivers/usb/musb/sunxi.c
index f9f6304..f11b8f6 100644
--- a/drivers/usb/musb/sunxi.c
+++ b/drivers/usb/musb/sunxi.c
@@ -617,7 +617,7 @@ static int sunxi_musb_probe(struct platform_device *pdev)
return -ENOMEM;

memset(&pdata, 0, sizeof(pdata));
- switch (of_usb_get_dr_mode(np)) {
+ switch (usb_get_dr_mode(&pdev->dev)) {
#if defined CONFIG_USB_MUSB_DUAL_ROLE || defined CONFIG_USB_MUSB_HOST
case USB_DR_MODE_HOST:
pdata.mode = MUSB_PORT_MODE_HOST;
diff --git a/drivers/usb/phy/phy-msm-usb.c b/drivers/usb/phy/phy-msm-usb.c
index c58c3c0..80eb991 100644
--- a/drivers/usb/phy/phy-msm-usb.c
+++ b/drivers/usb/phy/phy-msm-usb.c
@@ -1529,7 +1529,7 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg)
if (IS_ERR(motg->phy_rst))
motg->phy_rst = NULL;

- pdata->mode = of_usb_get_dr_mode(node);
+ pdata->mode = usb_get_dr_mode(&pdev->dev);
if (pdata->mode == USB_DR_MODE_UNKNOWN)
pdata->mode = USB_DR_MODE_OTG;

diff --git a/drivers/usb/phy/phy-tegra-usb.c b/drivers/usb/phy/phy-tegra-usb.c
index ab025b0..5fe4a57 100644
--- a/drivers/usb/phy/phy-tegra-usb.c
+++ b/drivers/usb/phy/phy-tegra-usb.c
@@ -1029,7 +1029,7 @@ static int tegra_usb_phy_probe(struct platform_device *pdev)
}

if (of_find_property(np, "dr_mode", NULL))
- tegra_phy->mode = of_usb_get_dr_mode(np);
+ tegra_phy->mode = usb_get_dr_mode(&pdev->dev);
else
tegra_phy->mode = USB_DR_MODE_HOST;

diff --git a/include/linux/usb/of.h b/include/linux/usb/of.h
index ff23fea..c3fe9e4 100644
--- a/include/linux/usb/of.h
+++ b/include/linux/usb/of.h
@@ -12,16 +12,10 @@
#include <linux/usb/phy.h>

#if IS_ENABLED(CONFIG_OF)
-enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np);
bool of_usb_host_tpl_support(struct device_node *np);
int of_usb_update_otg_caps(struct device_node *np,
struct usb_otg_caps *otg_caps);
#else
-static inline enum usb_dr_mode of_usb_get_dr_mode(struct device_node *np)
-{
- return USB_DR_MODE_UNKNOWN;
-}
-
static inline bool of_usb_host_tpl_support(struct device_node *np)
{
return false;
diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
index bd1dcf8..67929df 100644
--- a/include/linux/usb/otg.h
+++ b/include/linux/usb/otg.h
@@ -119,4 +119,13 @@ enum usb_dr_mode {
USB_DR_MODE_OTG,
};

+/**
+ * usb_get_dr_mode - Get dual role mode for given device
+ * @dev: Pointer to the given device
+ *
+ * The function gets phy interface string from property 'dr_mode',
+ * and returns the correspondig enum usb_dr_mode
+ */
+extern enum usb_dr_mode usb_get_dr_mode(struct device *dev);
+
#endif /* __LINUX_USB_OTG_H */
--
2.5.0

2015-08-25 11:05:28

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 4/5] usb: dwc3: core: convert to unified device property interface

No functional affect on existing platforms, but the driver
is now ready to extract the properties also from ACPI tables
as well as from DT.

Signed-off-by: Heikki Krogerus <[email protected]>
---
drivers/usb/dwc3/core.c | 45 ++++++++++++++++++++++-----------------------
1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c
index 8a76b39..f6a12b0 100644
--- a/drivers/usb/dwc3/core.c
+++ b/drivers/usb/dwc3/core.c
@@ -773,7 +773,6 @@ static int dwc3_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct dwc3_platform_data *pdata = dev_get_platdata(dev);
- struct device_node *node = dev->of_node;
struct resource *res;
struct dwc3 *dwc;
u8 lpm_nyet_threshold;
@@ -845,49 +844,49 @@ static int dwc3_probe(struct platform_device *pdev)
dwc->maximum_speed = usb_get_maximum_speed(dev);
dwc->dr_mode = usb_get_dr_mode(dev);

- if (node) {
- dwc->has_lpm_erratum = of_property_read_bool(node,
+ dwc->has_lpm_erratum = device_property_read_bool(dev,
"snps,has-lpm-erratum");
- of_property_read_u8(node, "snps,lpm-nyet-threshold",
+ device_property_read_u8(dev, "snps,lpm-nyet-threshold",
&lpm_nyet_threshold);
- dwc->is_utmi_l1_suspend = of_property_read_bool(node,
+ dwc->is_utmi_l1_suspend = device_property_read_bool(dev,
"snps,is-utmi-l1-suspend");
- of_property_read_u8(node, "snps,hird-threshold",
+ device_property_read_u8(dev, "snps,hird-threshold",
&hird_threshold);
- dwc->usb3_lpm_capable = of_property_read_bool(node,
+ dwc->usb3_lpm_capable = device_property_read_bool(dev,
"snps,usb3_lpm_capable");

- dwc->needs_fifo_resize = of_property_read_bool(node,
+ dwc->needs_fifo_resize = device_property_read_bool(dev,
"tx-fifo-resize");

- dwc->disable_scramble_quirk = of_property_read_bool(node,
+ dwc->disable_scramble_quirk = device_property_read_bool(dev,
"snps,disable_scramble_quirk");
- dwc->u2exit_lfps_quirk = of_property_read_bool(node,
+ dwc->u2exit_lfps_quirk = device_property_read_bool(dev,
"snps,u2exit_lfps_quirk");
- dwc->u2ss_inp3_quirk = of_property_read_bool(node,
+ dwc->u2ss_inp3_quirk = device_property_read_bool(dev,
"snps,u2ss_inp3_quirk");
- dwc->req_p1p2p3_quirk = of_property_read_bool(node,
+ dwc->req_p1p2p3_quirk = device_property_read_bool(dev,
"snps,req_p1p2p3_quirk");
- dwc->del_p1p2p3_quirk = of_property_read_bool(node,
+ dwc->del_p1p2p3_quirk = device_property_read_bool(dev,
"snps,del_p1p2p3_quirk");
- dwc->del_phy_power_chg_quirk = of_property_read_bool(node,
+ dwc->del_phy_power_chg_quirk = device_property_read_bool(dev,
"snps,del_phy_power_chg_quirk");
- dwc->lfps_filter_quirk = of_property_read_bool(node,
+ dwc->lfps_filter_quirk = device_property_read_bool(dev,
"snps,lfps_filter_quirk");
- dwc->rx_detect_poll_quirk = of_property_read_bool(node,
+ dwc->rx_detect_poll_quirk = device_property_read_bool(dev,
"snps,rx_detect_poll_quirk");
- dwc->dis_u3_susphy_quirk = of_property_read_bool(node,
+ dwc->dis_u3_susphy_quirk = device_property_read_bool(dev,
"snps,dis_u3_susphy_quirk");
- dwc->dis_u2_susphy_quirk = of_property_read_bool(node,
+ dwc->dis_u2_susphy_quirk = device_property_read_bool(dev,
"snps,dis_u2_susphy_quirk");

- dwc->tx_de_emphasis_quirk = of_property_read_bool(node,
+ dwc->tx_de_emphasis_quirk = device_property_read_bool(dev,
"snps,tx_de_emphasis_quirk");
- of_property_read_u8(node, "snps,tx_de_emphasis",
+ device_property_read_u8(dev, "snps,tx_de_emphasis",
&tx_de_emphasis);
- of_property_read_string(node, "snps,hsphy_interface",
- &dwc->hsphy_interface);
- } else if (pdata) {
+ device_property_read_string(dev, "snps,hsphy_interface",
+ &dwc->hsphy_interface);
+
+ if (pdata) {
dwc->maximum_speed = pdata->maximum_speed;
dwc->has_lpm_erratum = pdata->has_lpm_erratum;
if (pdata->lpm_nyet_threshold)
--
2.5.0

2015-08-25 11:05:47

by Heikki Krogerus

[permalink] [raw]
Subject: [PATCH 5/5] usb: dwc3: pci: passing forward the ACPI companion

Sharing the ACPI companion with dwc3 core so it has access
to the properties defined for DWC3 in ACPI tables.

Signed-off-by: Heikki Krogerus <[email protected]>
---
drivers/usb/dwc3/dwc3-pci.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/usb/dwc3/dwc3-pci.c b/drivers/usb/dwc3/dwc3-pci.c
index f626179..89eb364 100644
--- a/drivers/usb/dwc3/dwc3-pci.c
+++ b/drivers/usb/dwc3/dwc3-pci.c
@@ -154,6 +154,7 @@ static int dwc3_pci_probe(struct pci_dev *pci,
goto err;

dwc3->dev.parent = dev;
+ ACPI_COMPANION_SET(&dwc3->dev, ACPI_COMPANION(dev));

ret = platform_device_add(dwc3);
if (ret) {
--
2.5.0

2015-08-26 06:04:51

by Peter Chen

[permalink] [raw]
Subject: Re: [PATCH 0/5] usb: common and dwc3: converting to unified device property

On Tue, Aug 25, 2015 at 02:04:30PM +0300, Heikki Krogerus wrote:
> Hi,
>
> While converting dwc3 to the unified device property interface, I
> noticed that there is really nothing preventing of_usb_get_dr_mode and
> of_usb_get_maximum_speed from being converted as well. Hope that's OK.
>

Place the reference for usb_get_dr_mode and usb_get_maximum_speed
at otg.h and ch9.h may not be good, why not add a common.h which
is at include/linux/usb/ too.

> The only special case was dwc3-st.c, where the dr_mode is requested
> before the platform device has been populated. I changed it so that
> the dr_mode property is requested after the platform device is
> populated in a separate patch.
>
>
> Heikki Krogerus (5):
> usb: common: of_usb_get_maximum_speed to usb_get_maximum_speed
> usb: dwc3: st: prepare the driver for generic usb_get_dr_mode function
> usb: common: of_usb_get_dr_mode to usb_get_dr_mode
> usb: dwc3: core: convert to unified device property interface
> usb: dwc3: pci: passing forward the ACPI companion
>
> drivers/usb/chipidea/core.c | 4 +--
> drivers/usb/common/common.c | 59 +++++++++++++++--------------------------
> drivers/usb/dwc2/platform.c | 2 +-
> drivers/usb/dwc3/core.c | 50 +++++++++++++++++-----------------
> drivers/usb/dwc3/dwc3-pci.c | 1 +
> drivers/usb/dwc3/dwc3-st.c | 12 +++++++--
> drivers/usb/musb/musb_dsps.c | 2 +-
> drivers/usb/musb/sunxi.c | 2 +-
> drivers/usb/phy/phy-msm-usb.c | 2 +-
> drivers/usb/phy/phy-tegra-usb.c | 2 +-
> include/linux/usb/ch9.h | 11 +++++++-
> include/linux/usb/of.h | 12 ---------
> include/linux/usb/otg.h | 9 +++++++
> 13 files changed, 84 insertions(+), 84 deletions(-)
>
> --
> 2.5.0
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

--

Best Regards,
Peter Chen

2015-08-26 10:13:27

by Heikki Krogerus

[permalink] [raw]
Subject: Re: [PATCH 0/5] usb: common and dwc3: converting to unified device property

Hi Peter,

On Wed, Aug 26, 2015 at 12:53:20PM +0800, Peter Chen wrote:
> On Tue, Aug 25, 2015 at 02:04:30PM +0300, Heikki Krogerus wrote:
> > Hi,
> >
> > While converting dwc3 to the unified device property interface, I
> > noticed that there is really nothing preventing of_usb_get_dr_mode and
> > of_usb_get_maximum_speed from being converted as well. Hope that's OK.
> >
>
> Place the reference for usb_get_dr_mode and usb_get_maximum_speed
> at otg.h and ch9.h may not be good, why not add a common.h which
> is at include/linux/usb/ too.

Why? I'm not going to introduce new header file for prototypes which
depend on constants defined in other header files, unless there is a
really good reason. Please note that the prototypes for the existing
generic functions in common.c are defined in ch9.h and otg.h.

These functions are _generic_ helpers for dealing with definitions in
ch9.h and otg.h, so I don't really see any reason for putting their
prototypes anywhere else then into those same headers.


Thanks,

--
heikki

2015-08-27 03:03:13

by Peter Chen

[permalink] [raw]
Subject: Re: [PATCH 0/5] usb: common and dwc3: converting to unified device property

On Wed, Aug 26, 2015 at 01:13:22PM +0300, Heikki Krogerus wrote:
> Hi Peter,
>
> On Wed, Aug 26, 2015 at 12:53:20PM +0800, Peter Chen wrote:
> > On Tue, Aug 25, 2015 at 02:04:30PM +0300, Heikki Krogerus wrote:
> > > Hi,
> > >
> > > While converting dwc3 to the unified device property interface, I
> > > noticed that there is really nothing preventing of_usb_get_dr_mode and
> > > of_usb_get_maximum_speed from being converted as well. Hope that's OK.
> > >
> >
> > Place the reference for usb_get_dr_mode and usb_get_maximum_speed
> > at otg.h and ch9.h may not be good, why not add a common.h which
> > is at include/linux/usb/ too.
>
> Why? I'm not going to introduce new header file for prototypes which
> depend on constants defined in other header files, unless there is a
> really good reason. Please note that the prototypes for the existing
> generic functions in common.c are defined in ch9.h and otg.h.

Ok, I just had considered host controller driver may also call
usb_get_maximum_speed to get platform available speed, so I am
wonder if it is suitable to place it at ch9.h.

>
> These functions are _generic_ helpers for dealing with definitions in
> ch9.h and otg.h, so I don't really see any reason for putting their
> prototypes anywhere else then into those same headers.
>
>
> Thanks,
>
> --
> heikki

--

Best Regards,
Peter Chen