From: mkl@pengutronix.de (Marc Kleine-Budde)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/9] USB: add devicetree helpers for determining dr_mode and phy_type
Date: Thu, 14 Feb 2013 10:49:44 +0100 [thread overview]
Message-ID: <511CB338.8070204@pengutronix.de> (raw)
In-Reply-To: <87fw0zb5kk.fsf@ashishki-desk.ger.corp.intel.com>
On 02/14/2013 10:36 AM, Alexander Shishkin wrote:
> Sascha Hauer <s.hauer@pengutronix.de> writes:
>
>> From: Michael Grzeschik <m.grzeschik@pengutronix.de>
>>
>> This adds two little devicetree helper functions for determining the
>> dr_mode (host, peripheral, otg) and phy_type (utmi, ulpi,...) from
>> the devicetree.
>>
>> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de>
>> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
>> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
>> ---
>> drivers/usb/phy/Makefile | 1 +
>> drivers/usb/phy/of.c | 47 ++++++++++++++++++++++++++++++++++++++++++++++
>> drivers/usb/usb-common.c | 36 +++++++++++++++++++++++++++++++++++
>> include/linux/usb/of.h | 27 ++++++++++++++++++++++++++
>> include/linux/usb/otg.h | 7 +++++++
>> include/linux/usb/phy.h | 9 +++++++++
>> 6 files changed, 127 insertions(+)
>> create mode 100644 drivers/usb/phy/of.c
>> create mode 100644 include/linux/usb/of.h
>>
>> diff --git a/drivers/usb/phy/Makefile b/drivers/usb/phy/Makefile
>> index 9fa6327..e1be1e8 100644
>> --- a/drivers/usb/phy/Makefile
>> +++ b/drivers/usb/phy/Makefile
>> @@ -5,6 +5,7 @@
>> ccflags-$(CONFIG_USB_DEBUG) := -DDEBUG
>>
>> obj-$(CONFIG_USB_OTG_UTILS) += phy.o
>> +obj-$(CONFIG_OF) += of.o
>> obj-$(CONFIG_OMAP_USB2) += omap-usb2.o
>> obj-$(CONFIG_OMAP_USB3) += omap-usb3.o
>> obj-$(CONFIG_OMAP_CONTROL_USB) += omap-control-usb.o
>> diff --git a/drivers/usb/phy/of.c b/drivers/usb/phy/of.c
>> new file mode 100644
>> index 0000000..e6f3b74
>> --- /dev/null
>> +++ b/drivers/usb/phy/of.c
>> @@ -0,0 +1,47 @@
>> +/*
>> + * USB of helper code
>> + *
>> + * This program is free software; you can redistribute it and/or modify
>> + * it under the terms of the GNU General Public License as published by
>> + * the Free Software Foundation; either version 2 of the License, or
>> + * (at your option) any later version.
>> + */
>> +
>> +#include <linux/kernel.h>
>> +#include <linux/module.h>
>> +#include <linux/of.h>
>> +#include <linux/usb/of.h>
>> +#include <linux/usb/otg.h>
>> +
>> +static const char *usbphy_modes[] = {
>> + [USBPHY_INTERFACE_MODE_UNKNOWN] = "",
>> + [USBPHY_INTERFACE_MODE_UTMI] = "utmi",
>> + [USBPHY_INTERFACE_MODE_UTMIW] = "utmi_wide",
>> + [USBPHY_INTERFACE_MODE_ULPI] = "ulpi",
>> + [USBPHY_INTERFACE_MODE_SERIAL] = "serial",
>> + [USBPHY_INTERFACE_MODE_HSIC] = "hsic",
>> +};
>> +
>> +/**
>> + * of_usb_get_phy_mode - Get phy mode for given device_node
>> + * @np: Pointer to the given device_node
>> + *
>> + * The function gets phy interface string from property 'phy_type',
>> + * and returns the correspondig enum usb_phy_interface
>> + */
>> +enum usb_phy_interface of_usb_get_phy_mode(struct device_node *np)
>> +{
>> + const char *phy_type;
>> + int err, i;
>> +
>> + err = of_property_read_string(np, "phy_type", &phy_type);
>> + if (err < 0)
>> + return USBPHY_INTERFACE_MODE_UNKNOWN;
>> +
>> + for (i = 0; i < ARRAY_SIZE(usbphy_modes); i++)
>> + if (!strcmp(phy_type, usbphy_modes[i]))
>> + return i;
>> +
>> + return USBPHY_INTERFACE_MODE_UNKNOWN;
>> +}
>> +EXPORT_SYMBOL_GPL(of_usb_get_phy_mode);
>> diff --git a/drivers/usb/usb-common.c b/drivers/usb/usb-common.c
>> index d29503e..ad4d87d 100644
>> --- a/drivers/usb/usb-common.c
>> +++ b/drivers/usb/usb-common.c
>> @@ -14,6 +14,9 @@
>> #include <linux/kernel.h>
>> #include <linux/module.h>
>> #include <linux/usb/ch9.h>
>> +#include <linux/of.h>
>> +#include <linux/usb/of.h>
>> +#include <linux/usb/otg.h>
>>
>> const char *usb_speed_string(enum usb_device_speed speed)
>> {
>> @@ -32,4 +35,37 @@ const char *usb_speed_string(enum usb_device_speed speed)
>> }
>> EXPORT_SYMBOL_GPL(usb_speed_string);
>>
>> +#ifdef CONFIG_OF
>> +static const char *usb_dr_modes[] = {
>> + [USB_DR_MODE_UNKNOWN] = "",
>> + [USB_DR_MODE_HOST] = "host",
>> + [USB_DR_MODE_PERIPHERAL] = "peripheral",
>> + [USB_DR_MODE_OTG] = "otg",
>> +};
>
> It turns out this is a problem, especially since this is generic usb
> code: we have a chipidea controller (a patchset just arrived) that does
> both host and peripheral, but not otg. And I'm told now that dwc3
> controller can be synthesized like that too.
You mean a single instance of the controller (i.e. USB port) is host and
peripheral but has no otg registers. This means the mode of the port is
configured by userspace via the debugfs file? Is this possible?
The above property describes a single port not the whole controller. If
there is a controller with one host and one peripheral port the code in
this patch should be sufficient, as you have a property in the DT for
each port.
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 263 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20130214/5667bd71/attachment.sig>
next prev parent reply other threads:[~2013-02-14 9:49 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-04 13:24 [PATCH v4] USB: add devicetree helpers for determining dr_mode and phy_type Sascha Hauer
2013-02-04 13:24 ` [PATCH 1/9] usb: otg: use try_module_get in all usb_get_phy functions and add missing module_put Sascha Hauer
2013-02-04 13:59 ` Roger Quadros
2013-02-04 14:10 ` Marc Kleine-Budde
2013-02-04 14:39 ` Roger Quadros
2013-02-04 13:24 ` [PATCH 2/9] USB: move bulk of otg/otg.c to phy/phy.c Sascha Hauer
2013-02-19 9:30 ` Felipe Balbi
2013-02-19 19:06 ` Sascha Hauer
2013-02-19 19:48 ` Felipe Balbi
2013-02-04 13:24 ` [PATCH 3/9] USB: add devicetree helpers for determining dr_mode and phy_type Sascha Hauer
2013-02-14 9:36 ` Alexander Shishkin
2013-02-14 9:49 ` Marc Kleine-Budde [this message]
2013-02-14 9:58 ` Felipe Balbi
2013-02-14 10:07 ` Sascha Hauer
2013-02-14 10:15 ` Felipe Balbi
2013-02-14 11:24 ` Sascha Hauer
2013-02-14 13:10 ` Felipe Balbi
2013-02-14 16:06 ` Sascha Hauer
2013-02-14 18:04 ` Felipe Balbi
2013-02-14 18:30 ` Sascha Hauer
2013-02-14 19:36 ` Felipe Balbi
2013-02-15 10:54 ` Sascha Hauer
2013-02-17 9:00 ` Peter Chen
2013-02-14 10:11 ` Marc Kleine-Budde
2013-02-14 10:16 ` Felipe Balbi
2013-03-13 9:43 ` Peter Chen
2013-02-04 13:24 ` [PATCH 4/9] USB: chipidea: ci13xxx-imx: create dynamic platformdata Sascha Hauer
2013-02-04 13:24 ` [PATCH 5/9] USB: chipidea: add PTW and PTS handling Sascha Hauer
2013-02-14 13:07 ` Alexander Shishkin
2013-02-27 10:23 ` Marc Kleine-Budde
2013-02-04 13:24 ` [PATCH 6/9] USB chipidea: introduce dual role mode pdata flags Sascha Hauer
2013-02-22 2:09 ` Peter Chen
2013-02-27 10:42 ` Marc Kleine-Budde
2013-02-04 13:24 ` [PATCH 7/9] USB chipidea i.MX: introduce dr_mode property Sascha Hauer
2013-02-04 13:24 ` [PATCH 8/9] USB mxs-phy: Register phy with framework Sascha Hauer
2013-02-04 13:24 ` [PATCH 9/9] USB chipidea i.MX: use devm_usb_get_phy_by_phandle to get phy Sascha Hauer
2013-02-05 11:45 ` Sergei Shtylyov
2013-02-05 11:58 ` Sascha Hauer
2013-02-05 5:54 ` [PATCH v4] USB: add devicetree helpers for determining dr_mode and phy_type Peter Chen
2013-02-07 10:56 ` Sascha Hauer
2013-02-12 13:59 ` Sascha Hauer
2013-02-14 13:22 ` Alexander Shishkin
-- strict thread matches above, loose matches on Subject: below --
2013-02-27 12:27 [PATCH v5 0/9] " Marc Kleine-Budde
2013-02-27 12:27 ` [PATCH 3/9] " Marc Kleine-Budde
2013-02-27 12:31 ` Marc Kleine-Budde
2013-02-27 12:32 ` Felipe Balbi
2013-02-27 12:32 ` Felipe Balbi
2013-02-27 12:38 ` Marc Kleine-Budde
2013-02-27 12:41 ` Felipe Balbi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=511CB338.8070204@pengutronix.de \
--to=mkl@pengutronix.de \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).