From: Hans de Goede <hdegoede@redhat.com>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Guenter Roeck <linux@roeck-us.net>,
Rob Herring <robh+dt@kernel.org>,
Tobias Schramm <t.schramm@manjaro.org>,
linux-usb@vger.kernel.org, devicetree@vger.kernel.org
Subject: Re: [PATCH 2/4] usb: typec: Add typec_port_register_altmodes_from_fwnode()
Date: Mon, 10 Aug 2020 09:19:27 +0200 [thread overview]
Message-ID: <469f369a-73f4-c348-b9ee-1662956f45be@redhat.com> (raw)
In-Reply-To: <20200727130528.GB883641@kuha.fi.intel.com>
Hi,
On 7/27/20 3:05 PM, Heikki Krogerus wrote:
> Hi Hans,
>
> On Tue, Jul 14, 2020 at 01:36:15PM +0200, Hans de Goede wrote:
>> This can be used by Type-C controller drivers which use a standard
>> usb-connector fwnode, with altmodes sub-node, to describe the available
>> altmodes.
>>
>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>> ---
>> drivers/usb/typec/class.c | 56 +++++++++++++++++++++++++++++++++++++++
>> include/linux/usb/typec.h | 7 +++++
>> 2 files changed, 63 insertions(+)
>>
>> diff --git a/drivers/usb/typec/class.c b/drivers/usb/typec/class.c
>> index c9234748537a..47de2b2e3d54 100644
>> --- a/drivers/usb/typec/class.c
>> +++ b/drivers/usb/typec/class.c
>> @@ -1607,6 +1607,62 @@ typec_port_register_altmode(struct typec_port *port,
>> }
>> EXPORT_SYMBOL_GPL(typec_port_register_altmode);
>>
>> +void typec_port_register_altmodes_from_fwnode(struct typec_port *port,
>> + const struct typec_altmode_ops *ops, void *drvdata,
>> + struct typec_altmode **altmodes, size_t n,
>> + struct fwnode_handle *fwnode)
>> +{
>> + struct fwnode_handle *altmodes_node, *child;
>> + struct typec_altmode_desc desc;
>> + struct typec_altmode *alt;
>> + size_t index = 0;
>> + u32 svid, vdo;
>> + int ret;
>> +
>> + altmodes_node = fwnode_get_named_child_node(fwnode, "altmodes");
>> + if (!altmodes_node)
>> + return;
>
> Do we need that? Why not just make the sub-nodes describing the
> alternate modes direct children of the connector node instead of
> grouping them under a special sub-node?
If you envision how this will look in e.g. DTS sources then I think
you will see that this grouping keeps the DTS source code more
readable. Grouping things together like this is somewhat normal in
devicetree files. E.g. PMIC's or other regulator providers typical
have a "regulators" node grouping all their regulators; and also the OF
graph bindings which are used in the USB-connector node start with a
"ports" parent / grouping node.
> If the child node of the connector has device properties "svid" and
> "vdo" then it is an alt mode that the connector supports, and it can't
> be anything else, no?
If you want to get rid of the altmodes parent/grouping node, then the
usual way to do this would be to add a compatible string to the nodes,
rather then check for the existence of some properties.
Regards,
Hans
>
>
>> + child = NULL;
>> + while ((child = fwnode_get_next_child_node(altmodes_node, child))) {
>> + ret = fwnode_property_read_u32(child, "svid", &svid);
>> + if (ret) {
>> + dev_err(&port->dev, "Error reading svid for altmode %s\n",
>> + fwnode_get_name(child));
>> + continue;
>> + }
>> +
>> + ret = fwnode_property_read_u32(child, "vdo", &vdo);
>> + if (ret) {
>> + dev_err(&port->dev, "Error reading vdo for altmode %s\n",
>> + fwnode_get_name(child));
>> + continue;
>> + }
>> +
>> + if (index >= n) {
>> + dev_err(&port->dev, "Error not enough space for altmode %s\n",
>> + fwnode_get_name(child));
>> + continue;
>> + }
>> +
>> + desc.svid = svid;
>> + desc.vdo = vdo;
>> + desc.mode = index + 1;
>> + alt = typec_port_register_altmode(port, &desc);
>> + if (IS_ERR(alt)) {
>> + dev_err(&port->dev, "Error registering altmode %s\n",
>> + fwnode_get_name(child));
>> + continue;
>> + }
>> +
>> + alt->ops = ops;
>> + typec_altmode_set_drvdata(alt, drvdata);
>> + altmodes[index] = alt;
>> + index++;
>> + }
>> +}
>> +EXPORT_SYMBOL_GPL(typec_port_register_altmodes_from_fwnode);
>> +
>> /**
>> * typec_register_port - Register a USB Type-C Port
>> * @parent: Parent device
>> diff --git a/include/linux/usb/typec.h b/include/linux/usb/typec.h
>> index 5daa1c49761c..fbe4bccb3a98 100644
>> --- a/include/linux/usb/typec.h
>> +++ b/include/linux/usb/typec.h
>> @@ -17,6 +17,7 @@ struct typec_partner;
>> struct typec_cable;
>> struct typec_plug;
>> struct typec_port;
>> +struct typec_altmode_ops;
>>
>> struct fwnode_handle;
>> struct device;
>> @@ -121,6 +122,12 @@ struct typec_altmode
>> struct typec_altmode
>> *typec_port_register_altmode(struct typec_port *port,
>> const struct typec_altmode_desc *desc);
>> +
>> +void typec_port_register_altmodes_from_fwnode(struct typec_port *port,
>> + const struct typec_altmode_ops *ops, void *drvdata,
>> + struct typec_altmode **altmodes, size_t n,
>> + struct fwnode_handle *fwnode);
>> +
>> void typec_unregister_altmode(struct typec_altmode *altmode);
>>
>> struct typec_port *typec_altmode2port(struct typec_altmode *alt);
>> --
>> 2.26.2
>
> thanks,
>
next prev parent reply other threads:[~2020-08-10 7:19 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-07-14 11:36 PATCH 0/4] usbd: typec: fusb302: Add support for specifying supported alternate-modes through devicetree/fwnodes Hans de Goede
2020-07-14 11:36 ` [PATCH 1/4] dt-bindings: usb-connector: Add support for Type-C alternate-modes Hans de Goede
2020-07-21 2:26 ` Rob Herring
2020-07-21 5:49 ` Prashant Malani
2020-07-22 7:18 ` Hans de Goede
2021-12-10 22:06 ` Prashant Malani
2020-07-14 11:36 ` [PATCH 2/4] usb: typec: Add typec_port_register_altmodes_from_fwnode() Hans de Goede
2020-07-15 16:39 ` Guenter Roeck
2020-07-15 21:14 ` Hans de Goede
2020-07-16 0:01 ` Guenter Roeck
2020-07-27 13:05 ` Heikki Krogerus
2020-08-10 7:19 ` Hans de Goede [this message]
2020-08-11 14:38 ` Heikki Krogerus
2020-08-12 8:36 ` Hans de Goede
2020-08-12 12:49 ` Heikki Krogerus
2020-08-13 14:30 ` Hans de Goede
2020-08-26 12:37 ` Hans de Goede
2020-08-26 13:06 ` Heikki Krogerus
2020-08-26 13:17 ` Heikki Krogerus
2021-04-08 18:59 ` Hans de Goede
2020-07-14 11:36 ` [PATCH 3/4] usb: typec: tcpm: Add support for altmodes Hans de Goede
2020-07-15 16:41 ` Guenter Roeck
2020-07-14 11:36 ` [PATCH 4/4] platform/x86/intel_cht_int33fe: Add displayport altmode fwnode to the connector fwnode Hans de Goede
2021-12-02 19:29 ` PATCH 0/4] usbd: typec: fusb302: Add support for specifying supported alternate-modes through devicetree/fwnodes Prashant Malani
2021-12-03 10:13 ` Hans de Goede
2021-12-03 20:22 ` Prashant Malani
2021-12-07 9:56 ` Heikki Krogerus
2021-12-07 10:04 ` Hans de Goede
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=469f369a-73f4-c348-b9ee-1662956f45be@redhat.com \
--to=hdegoede@redhat.com \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=heikki.krogerus@linux.intel.com \
--cc=linux-usb@vger.kernel.org \
--cc=linux@roeck-us.net \
--cc=robh+dt@kernel.org \
--cc=t.schramm@manjaro.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).