From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: "Rafael J. Wysocki" <rafael@kernel.org>,
Heikki Krogerus <heikki.krogerus@linux.intel.com>,
Linus Walleij <linus.walleij@linaro.org>,
linux-kernel@vger.kernel.org,
platform-driver-x86@vger.kernel.org
Subject: Re: [PATCH v2 2/3] platform/x86: intel_cht_int33fe: use inline reference properties
Date: Sat, 7 Sep 2019 19:12:27 +0300 [thread overview]
Message-ID: <20190907161227.GI2680@smile.fi.intel.com> (raw)
In-Reply-To: <20190906222611.223532-2-dmitry.torokhov@gmail.com>
On Fri, Sep 06, 2019 at 03:26:10PM -0700, Dmitry Torokhov wrote:
> Now that static device properties allow defining reference properties
> together with all other types of properties, instead of managing them
> separately, let's adjust the driver.
>
Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
> ---
>
> v1-v2:
>
> - rebased on top of linux-next-20190904
>
> drivers/platform/x86/intel_cht_int33fe.c | 81 ++++++++++++------------
> 1 file changed, 41 insertions(+), 40 deletions(-)
>
> diff --git a/drivers/platform/x86/intel_cht_int33fe.c b/drivers/platform/x86/intel_cht_int33fe.c
> index 1d5d877b9582..4177c5424931 100644
> --- a/drivers/platform/x86/intel_cht_int33fe.c
> +++ b/drivers/platform/x86/intel_cht_int33fe.c
> @@ -46,30 +46,6 @@ struct cht_int33fe_data {
> struct fwnode_handle *dp;
> };
>
> -static const struct software_node nodes[];
> -
> -static const struct software_node_ref_args pi3usb30532_ref = {
> - &nodes[INT33FE_NODE_PI3USB30532]
> -};
> -
> -static const struct software_node_ref_args dp_ref = {
> - &nodes[INT33FE_NODE_DISPLAYPORT]
> -};
> -
> -static struct software_node_ref_args mux_ref;
> -
> -static const struct software_node_reference usb_connector_refs[] = {
> - { "orientation-switch", 1, &pi3usb30532_ref},
> - { "mode-switch", 1, &pi3usb30532_ref},
> - { "displayport", 1, &dp_ref},
> - { }
> -};
> -
> -static const struct software_node_reference fusb302_refs[] = {
> - { "usb-role-switch", 1, &mux_ref},
> - { }
> -};
> -
> /*
> * Grrr I severly dislike buggy BIOS-es. At least one BIOS enumerates
> * the max17047 both through the INT33FE ACPI device (it is right there
> @@ -105,8 +81,18 @@ static const struct property_entry max17047_props[] = {
> { }
> };
>
> +/*
> + * We are not using inline property here because those are constant,
> + * and we need to adjust this one at runtime to point to real
> + * software node.
> + */
> +static struct software_node_ref_args fusb302_mux_refs[] = {
> + { .node = NULL },
> +};
> +
> static const struct property_entry fusb302_props[] = {
> PROPERTY_ENTRY_STRING("linux,extcon-name", "cht_wcove_pwrsrc"),
> + PROPERTY_ENTRY_REF_ARRAY("usb-role-switch", fusb302_mux_refs),
> { }
> };
>
> @@ -122,6 +108,8 @@ static const u32 snk_pdo[] = {
> PDO_VAR(5000, 12000, 3000),
> };
>
> +static const struct software_node nodes[];
> +
> static const struct property_entry usb_connector_props[] = {
> PROPERTY_ENTRY_STRING("data-role", "dual"),
> PROPERTY_ENTRY_STRING("power-role", "dual"),
> @@ -129,15 +117,21 @@ static const struct property_entry usb_connector_props[] = {
> PROPERTY_ENTRY_U32_ARRAY("source-pdos", src_pdo),
> PROPERTY_ENTRY_U32_ARRAY("sink-pdos", snk_pdo),
> PROPERTY_ENTRY_U32("op-sink-microwatt", 2500000),
> + PROPERTY_ENTRY_REF("orientation-switch",
> + &nodes[INT33FE_NODE_PI3USB30532]),
> + PROPERTY_ENTRY_REF("mode-switch",
> + &nodes[INT33FE_NODE_PI3USB30532]),
> + PROPERTY_ENTRY_REF("displayport",
> + &nodes[INT33FE_NODE_DISPLAYPORT]),
> { }
> };
>
> static const struct software_node nodes[] = {
> - { "fusb302", NULL, fusb302_props, fusb302_refs },
> + { "fusb302", NULL, fusb302_props },
> { "max17047", NULL, max17047_props },
> { "pi3usb30532" },
> { "displayport" },
> - { "connector", &nodes[0], usb_connector_props, usb_connector_refs },
> + { "connector", &nodes[0], usb_connector_props },
> { }
> };
>
> @@ -173,9 +167,10 @@ static void cht_int33fe_remove_nodes(struct cht_int33fe_data *data)
> {
> software_node_unregister_nodes(nodes);
>
> - if (mux_ref.node) {
> - fwnode_handle_put(software_node_fwnode(mux_ref.node));
> - mux_ref.node = NULL;
> + if (fusb302_mux_refs[0].node) {
> + fwnode_handle_put(
> + software_node_fwnode(fusb302_mux_refs[0].node));
> + fusb302_mux_refs[0].node = NULL;
> }
>
> if (data->dp) {
> @@ -187,25 +182,31 @@ static void cht_int33fe_remove_nodes(struct cht_int33fe_data *data)
>
> static int cht_int33fe_add_nodes(struct cht_int33fe_data *data)
> {
> + const struct software_node *mux_ref_node;
> int ret;
>
> - ret = software_node_register_nodes(nodes);
> - if (ret)
> - return ret;
> -
> - /* The devices that are not created in this driver need extra steps. */
> -
> /*
> * There is no ACPI device node for the USB role mux, so we need to wait
> * until the mux driver has created software node for the mux device.
> * It means we depend on the mux driver. This function will return
> * -EPROBE_DEFER until the mux device is registered.
> */
> - mux_ref.node = software_node_find_by_name(NULL, "intel-xhci-usb-sw");
> - if (!mux_ref.node) {
> - ret = -EPROBE_DEFER;
> - goto err_remove_nodes;
> - }
> + mux_ref_node = software_node_find_by_name(NULL, "intel-xhci-usb-sw");
> + if (!mux_ref_node)
> + return -EPROBE_DEFER;
> +
> + /*
> + * Update node used in "usb-role-switch" property. Note that we
> + * rely on software_node_register_nodes() to use the original
> + * instance of properties instead of copying them.
> + */
> + fusb302_mux_refs[0].node = mux_ref_node;
> +
> + ret = software_node_register_nodes(nodes);
> + if (ret)
> + return ret;
> +
> + /* The devices that are not created in this driver need extra steps. */
>
> /*
> * The DP connector does have ACPI device node. In this case we can just
> --
> 2.23.0.187.g17f5b7556c-goog
>
--
With Best Regards,
Andy Shevchenko
next prev parent reply other threads:[~2019-09-07 16:12 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-06 22:26 [PATCH v2 1/3] software node: implement reference properties Dmitry Torokhov
2019-09-06 22:26 ` [PATCH v2 2/3] platform/x86: intel_cht_int33fe: use inline " Dmitry Torokhov
2019-09-07 16:12 ` Andy Shevchenko [this message]
2019-09-06 22:26 ` [PATCH v2 3/3] software node: remove separate handling of references Dmitry Torokhov
2019-09-07 16:13 ` Andy Shevchenko
2019-09-07 16:08 ` [PATCH v2 1/3] software node: implement reference properties Andy Shevchenko
2019-09-07 16:32 ` Dmitry Torokhov
2019-09-07 17:12 ` Andy Shevchenko
2019-09-07 17:37 ` Dmitry Torokhov
2019-09-07 18:03 ` Andy Shevchenko
2019-09-07 18:23 ` Dmitry Torokhov
2019-09-09 10:09 ` Andy Shevchenko
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=20190907161227.GI2680@smile.fi.intel.com \
--to=andriy.shevchenko@linux.intel.com \
--cc=dmitry.torokhov@gmail.com \
--cc=heikki.krogerus@linux.intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=rafael@kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.