From: David Lechner <david@lechnology.com>
To: Kishon Vijay Abraham I <kishon@ti.com>
Cc: "Petr Kulhavy" <petr@barix.com>,
"Rob Herring" <robh+dt@kernel.org>,
"Pawel Moll" <pawel.moll@arm.com>,
"Mark Rutland" <mark.rutland@arm.com>,
"Ian Campbell" <ijc+devicetree@hellion.org.uk>,
"Kumar Gala" <galak@codeaurora.org>,
"Russell King" <linux@arm.linux.org.uk>,
"Sekhar Nori" <nsekhar@ti.com>,
"Kevin Hilman" <khilman@kernel.org>,
"Alan Stern" <stern@rowland.harvard.edu>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Bin Liu" <b-liu@ti.com>, "Andreas Färber" <afaerber@suse.de>,
"Tony Lindgren" <tony@atomide.com>,
"Robert Jarzmik" <robert.jarzmik@free.fr>,
"Sergei Shtylyov" <sergei.shtylyov@cogentembedded.com>,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org
Subject: Re: [PATCH v2 06/11] phy: da8xx-usb: new driver for DA8XX SoC USB PHY
Date: Wed, 13 Apr 2016 15:51:15 -0500 [thread overview]
Message-ID: <570EB143.4060309@lechnology.com> (raw)
In-Reply-To: <56FE74AC.6080303@ti.com>
On 04/01/2016 08:16 AM, Kishon Vijay Abraham I wrote:
>> +EXPORT_SYMBOL_GPL(da8xx_usb20_phy_set_mode);
>
> Don't prefer export symbols from PHY driver. That'll create unnecessary
> dependencies between the controller and the PHY.
>
> I think it'll be better to create a new attribute and use it?
>
Just having an attribute that keeps track of state does not work. I need
a callback to poke registers. Would this be acceptable instead?
-----8<------
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index e7e574d..a13c7e4 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -342,6 +342,36 @@ int phy_power_off(struct phy *phy)
}
EXPORT_SYMBOL_GPL(phy_power_off);
+int phy_get_mode(struct phy *phy, enum phy_mode *mode)
+{
+ int ret;
+
+ if (!phy || !phy->ops->get_mode)
+ return 0;
+
+ mutex_lock(&phy->mutex);
+ ret = phy->ops->get_mode(phy, mode);
+ mutex_unlock(&phy->mutex);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(phy_get_mode);
+
+int phy_set_mode(struct phy *phy, enum phy_mode mode)
+{
+ int ret;
+
+ if (!phy || !phy->ops->set_mode)
+ return 0;
+
+ mutex_lock(&phy->mutex);
+ ret = phy->ops->set_mode(phy, mode);
+ mutex_unlock(&phy->mutex);
+
+ return ret;
+}
+EXPORT_SYMBOL_GPL(phy_set_mode);
+
/**
* _of_phy_get() - lookup and obtain a reference to a phy by phandle
* @np: device_node for which to get the phy
diff --git a/include/linux/phy/phy.h b/include/linux/phy/phy.h
index 8cf05e3..12c1986 100644
--- a/include/linux/phy/phy.h
+++ b/include/linux/phy/phy.h
@@ -22,12 +22,21 @@
struct phy;
+enum phy_mode {
+ PHY_MODE_INVALID,
+ PHY_MODE_USB_HOST,
+ PHY_MODE_USB_DEVICE,
+ PHY_MODE_USB_OTG,
+};
+
/**
* struct phy_ops - set of function pointers for performing phy operations
* @init: operation to be performed for initializing phy
* @exit: operation to be performed while exiting
* @power_on: powering on the phy
* @power_off: powering off the phy
+ * @get_mode: get the current mode of the phy
+ * @set_mode: set the mode of the phy
* @owner: the module owner containing the ops
*/
struct phy_ops {
@@ -35,6 +44,8 @@ struct phy_ops {
int (*exit)(struct phy *phy);
int (*power_on)(struct phy *phy);
int (*power_off)(struct phy *phy);
+ int (*get_mode)(struct phy *phy, enum phy_mode *mode);
+ int (*set_mode)(struct phy *phy, enum phy_mode mode);
struct module *owner;
};
@@ -119,6 +130,8 @@ int phy_init(struct phy *phy);
int phy_exit(struct phy *phy);
int phy_power_on(struct phy *phy);
int phy_power_off(struct phy *phy);
+int phy_get_mode(struct phy *phy, enum phy_mode *mode);
+int phy_set_mode(struct phy *phy, enum phy_mode mode);
static inline int phy_get_bus_width(struct phy *phy)
{
return phy->attrs.bus_width;
@@ -224,6 +237,16 @@ static inline int phy_power_off(struct phy *phy)
return -ENOSYS;
}
+static inline int phy_get_mode(struct phy *phy, enum phy_mode *mode)
+{
+ return 0;
+}
+
+static inline int phy_set_mode(struct phy *phy, enum phy_mode mode)
+{
+ return 0;
+}
+
static inline int phy_get_bus_width(struct phy *phy)
{
return -ENOSYS;
next prev parent reply other threads:[~2016-04-13 20:51 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-17 2:26 [PATCH v2 00/11] da8xx USB clocks David Lechner
2016-03-17 2:26 ` [PATCH v2 01/11] ARM: davinci: defined missing CFGCHIP2_REFFREQ_* macros for MUSB PHY David Lechner
2016-03-17 2:26 ` [PATCH v2 02/11] ARM: davinci: add set_parent callback for mux clocks David Lechner
2016-03-17 2:26 ` [PATCH v2 03/11] ARM: davinci: da850: use clk->set_parent for async3 David Lechner
2016-03-23 15:56 ` Sekhar Nori
2016-03-23 17:20 ` David Lechner
2016-03-23 17:29 ` Sekhar Nori
2016-03-23 18:32 ` David Lechner
2016-03-24 13:44 ` Sekhar Nori
2016-03-17 2:26 ` [PATCH v2 04/11] ARM: davinci: da8xx: add usb phy clocks David Lechner
2016-03-17 12:12 ` Sergei Shtylyov
2016-03-23 16:56 ` Sekhar Nori
2016-03-23 17:45 ` David Lechner
2016-03-23 17:54 ` Sekhar Nori
2016-03-17 2:26 ` [PATCH v2 05/11] dt-bindings: Add bindings for phy-da8xx-usb David Lechner
2016-03-19 23:56 ` Rob Herring
2016-03-23 17:06 ` Sekhar Nori
2016-03-23 17:56 ` David Lechner
2016-03-17 2:26 ` [PATCH v2 06/11] phy: da8xx-usb: new driver for DA8XX SoC USB PHY David Lechner
2016-03-17 12:38 ` Sergei Shtylyov
2016-03-23 17:21 ` Sekhar Nori
2016-03-23 18:06 ` David Lechner
2016-03-24 14:01 ` David Laight
2016-04-01 13:16 ` Kishon Vijay Abraham I
2016-04-01 14:45 ` Bin Liu
2016-04-01 16:02 ` David Lechner
2016-04-01 16:19 ` Bin Liu
2016-04-01 19:49 ` Sergei Shtylyov
2016-04-01 19:45 ` Sergei Shtylyov
2016-04-01 19:56 ` Bin Liu
2016-04-13 20:51 ` David Lechner [this message]
2016-04-14 12:32 ` Kishon Vijay Abraham I
2016-03-17 2:26 ` [PATCH v2 07/11] ARM: davinci: da8xx: Add USB PHY platform declaration David Lechner
2016-03-17 2:26 ` [PATCH v2 08/11] ARM: dt: da850: Add usb phy node David Lechner
2016-03-17 2:26 ` [PATCH v2 09/11] usb: ohci-da8xx: Remove code that references mach David Lechner
2016-03-17 12:53 ` Sergei Shtylyov
2016-03-17 18:01 ` Alan Stern
2016-03-17 2:26 ` [PATCH v2 10/11] usb: musb: da8xx: Use devm in probe David Lechner
2016-03-17 11:07 ` Sergei Shtylyov
2016-03-17 2:26 ` [PATCH v2 11/11] usb: musb: da8xx: Remove mach code David Lechner
2016-03-17 13:11 ` Sergei Shtylyov
2016-03-17 17:38 ` David Lechner
2016-03-17 13:39 ` [PATCH v2 00/11] da8xx USB clocks Sergei Shtylyov
2016-03-23 17:26 ` Sekhar Nori
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=570EB143.4060309@lechnology.com \
--to=david@lechnology.com \
--cc=afaerber@suse.de \
--cc=b-liu@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=galak@codeaurora.org \
--cc=gregkh@linuxfoundation.org \
--cc=ijc+devicetree@hellion.org.uk \
--cc=khilman@kernel.org \
--cc=kishon@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mark.rutland@arm.com \
--cc=nsekhar@ti.com \
--cc=pawel.moll@arm.com \
--cc=petr@barix.com \
--cc=robert.jarzmik@free.fr \
--cc=robh+dt@kernel.org \
--cc=sergei.shtylyov@cogentembedded.com \
--cc=stern@rowland.harvard.edu \
--cc=tony@atomide.com \
/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).