Messages in this thread Patch in this message | | | From | Heikki Krogerus <> | Subject | [PATCH 2/3] usb: roles: intel_xhci: Supplying software node for the role mux | Date | Thu, 15 Aug 2019 14:28:25 +0300 |
| |
The primary purpose for this node will be to allow linking the users of the switch to it. The users will be for example USB Type-C connectors. By supplying a reference to this node in the software nodes representing the USB Type-C controllers or connectors, the drivers for those devices can access the switch.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com> --- drivers/usb/roles/intel-xhci-usb-role-switch.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/roles/intel-xhci-usb-role-switch.c b/drivers/usb/roles/intel-xhci-usb-role-switch.c index 277de96181f9..1e86c01da35c 100644 --- a/drivers/usb/roles/intel-xhci-usb-role-switch.c +++ b/drivers/usb/roles/intel-xhci-usb-role-switch.c @@ -39,6 +39,10 @@ struct intel_xhci_usb_data { void __iomem *base; }; +static const struct software_node intel_xhci_usb_node = { + "intel-xhci-usb-sw", +}; + static int intel_xhci_usb_set_role(struct device *dev, enum usb_role role) { struct intel_xhci_usb_data *data = dev_get_drvdata(dev); @@ -122,7 +126,7 @@ static enum usb_role intel_xhci_usb_get_role(struct device *dev) return role; } -static const struct usb_role_switch_desc sw_desc = { +static struct usb_role_switch_desc sw_desc = { .set = intel_xhci_usb_set_role, .get = intel_xhci_usb_get_role, .allow_userspace_control = true, @@ -133,6 +137,7 @@ static int intel_xhci_usb_probe(struct platform_device *pdev) struct device *dev = &pdev->dev; struct intel_xhci_usb_data *data; struct resource *res; + int ret; data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); if (!data) @@ -147,6 +152,12 @@ static int intel_xhci_usb_probe(struct platform_device *pdev) platform_set_drvdata(pdev, data); + ret = software_node_register(&intel_xhci_usb_node); + if (ret) + return ret; + + sw_desc.fwnode = software_node_fwnode(&intel_xhci_usb_node); + data->role_sw = usb_role_switch_register(dev, &sw_desc); if (IS_ERR(data->role_sw)) return PTR_ERR(data->role_sw); -- 2.20.1
| |