Bryan O'Donoghue
3e63cff384
usb: roles: Switch on role-switch uevent reporting
...
Right now we don't report to user-space a role switch when doing a
usb_role_switch_set_role() despite having registered the uevent callbacks.
This patch switches on the notifications allowing user-space to see
role-switch change notifications and subsequently determine the current
controller data-role.
example:
PFX=/devices/platform/soc/78d9000.usb/ci_hdrc.0
root@somebox# udevadm monitor -p
KERNEL[49.894994] change $PFX/usb_role/ci_hdrc.0-role-switch (usb_role)
ACTION=change
DEVPATH=$PFX/usb_role/ci_hdrc.0-role-switch
SUBSYSTEM=usb_role
DEVTYPE=usb_role_switch
USB_ROLE_SWITCH=ci_hdrc.0-role-switch
SEQNUM=2432
Cc: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: Chunfeng Yun <chunfeng.yun@mediatek.com >
Cc: Suzuki K Poulose <suzuki.poulose@arm.com >
Cc: Alexandre Belloni <alexandre.belloni@bootlin.com >
Cc: Wen Yang <wenyang@linux.alibaba.com >
Cc: chenqiwu <chenqiwu@xiaomi.com >
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org >
Link: https://lore.kernel.org/r/20200508162937.2566818-1-bryan.odonoghue@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-05-13 14:20:49 +02:00
Heikki Krogerus
e5256194cb
usb: roles: Allow the role switches to be named
...
The switch devices have been named by using the name of the
parent device as base for now, but if for example the
parent device controls multiple muxes, that will not work.
Adding an optional member "name" to the switch descriptor
that can be used for naming the switch during registration.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Link: https://lore.kernel.org/r/20200302135353.56659-7-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-04 11:12:50 +01:00
Heikki Krogerus
bce3052f0c
usb: roles: Provide the switch drivers handle to the switch in the API
...
The USB role callback functions had a parameter pointing to
the parent device (struct device) of the switch. The
assumption was that the switch parent is always the
controller. Firstly, that may not be true in every case, and
secondly, it prevents us from supporting devices that supply
multiple muxes.
Changing the first parameter of usb_role_switch_set_t and
usb_role_switch_get_t from struct device to struct
usb_role_switch.
Cc: Peter Chen <Peter.Chen@nxp.com >
Cc: Felipe Balbi <balbi@kernel.org >
Cc: Chunfeng Yun <chunfeng.yun@mediatek.com >
Cc: Bin Liu <b-liu@ti.com >
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Link: https://lore.kernel.org/r/20200302135353.56659-6-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-04 11:12:50 +01:00
Heikki Krogerus
69af044a77
usb: roles: Leave the private driver data pointer to the drivers
...
Adding usb_role_switch_get/set_drvdata() functions that the
switch drivers can use for setting and getting private data
pointer that is associated with the switch.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Link: https://lore.kernel.org/r/20200302135353.56659-5-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-03-04 11:12:49 +01:00
chenqiwu
0616ca73fd
usb: use kobj_to_dev() API
...
Use kobj_to_dev() API instead of container_of().
Signed-off-by: chenqiwu <chenqiwu@xiaomi.com >
Link: https://lore.kernel.org/r/1581683820-9978-1-git-send-email-qiwuchen55@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2020-02-14 08:38:15 -08:00
Wen Yang
1848a54319
usb: roles: fix a potential use after free
...
Free the sw structure only after we are done using it.
This patch just moves the put_device() down a bit to avoid the
use after free.
Fixes: 5c54fcac9a
("usb: roles: Take care of driver module reference counting")
Signed-off-by: Wen Yang <wenyang@linux.alibaba.com >
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Reviewed-by: Peter Chen <peter.chen@nxp.com >
Cc: stable <stable@vger.kernel.org >
Cc: Hans de Goede <hdegoede@redhat.com >
Cc: Chunfeng Yun <chunfeng.yun@mediatek.com >
Cc: Suzuki K Poulose <suzuki.poulose@arm.com >
Cc: linux-usb@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Link: https://lore.kernel.org/r/20191124142236.25671-1-wenyang@linux.alibaba.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-12-10 11:41:18 +01:00
Heikki Krogerus
c6919d5e0c
usb: roles: Add usb_role_switch_find_by_fwnode()
...
Simple wrapper function that searches USB role switches with
class_find_device_by_fwnode().
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Reviewed-by: Hans de Goede <hdegoede@redhat.com >
Tested-by: Hans de Goede <hdegoede@redhat.com >
Link: https://lore.kernel.org/r/20191008122600.22340-2-heikki.krogerus@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-11-04 15:05:25 +01:00
Chunfeng Yun
6fadd72943
usb: roles: get usb-role-switch from parent
...
when the USB host controller is the parent of the connector,
usually type-B, sometimes don't need the graph, so we should
check whether it's parent registers usb-role-switch or not
firstly, and get it if exists.
Suggested-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com >
Link: https://lore.kernel.org/r/1567070558-29417-9-git-send-email-chunfeng.yun@mediatek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-03 18:00:43 +02:00
Greg Kroah-Hartman
c5c0283a9d
Merge generic_lookup_helpers into usb-next
...
The lookup helpers are needed here.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-03 17:11:07 +02:00
Heikki Krogerus
a31f01777b
usb: roles: Add fwnode_usb_role_switch_get() function
...
The fwnode_usb_role_switch_get() function is exactly the
same as usb_role_switch_get(), except that it takes struct
fwnode_handle as parameter instead of struct device.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com >
Tested-by: Biju Das <biju.das@bp.renesas.com >
Link: https://lore.kernel.org/r/1567070558-29417-8-git-send-email-chunfeng.yun@mediatek.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-09-03 16:46:17 +02:00
Suzuki K Poulose
67843bbaf3
drivers: Introduce device lookup variants by fwnode
...
Add a helper to match the firmware node handle of a device and provide
wrappers for {bus/class/driver}_find_device() APIs to avoid proliferation
of duplicate custom match functions.
Cc: "David S. Miller" <davem@davemloft.net >
Cc: Doug Ledford <dledford@redhat.com >
Cc: Jason Gunthorpe <jgg@ziepe.ca >
Cc: linux-usb@vger.kernel.org
Cc: "Rafael J. Wysocki" <rafael@kernel.org >
Cc: Ulf Hansson <ulf.hansson@linaro.org >
Cc: Joe Perches <joe@perches.com >
Cc: Will Deacon <will.deacon@arm.com >
Cc: Joerg Roedel <joro@8bytes.org >
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com >
Acked-by: Robin Murphy <robin.murphy@arm.com >
Reviewed-by: Mathieu Poirier <mathieu.poirier@linaro.org >
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Link: https://lore.kernel.org/r/20190723221838.12024-4-suzuki.poulose@arm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-07-30 13:07:42 +02:00
Suzuki K Poulose
6cda08a20d
drivers: Introduce device lookup variants by name
...
Add a helper to match the device name for device lookup. Also
reuse this generic exported helper for the existing bus_find_device_by_name().
and add similar variants for driver/class.
Cc: Alessandro Zummo <a.zummo@towertech.it >
Cc: Alexander Aring <alex.aring@gmail.com >
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com >
Cc: Arnd Bergmann <arnd@arndb.de >
Cc: Dan Murphy <dmurphy@ti.com >
Cc: Harald Freudenberger <freude@linux.ibm.com >
Cc: Heiko Carstens <heiko.carstens@de.ibm.com >
Cc: Jacek Anaszewski <jacek.anaszewski@gmail.com >
Cc: Lee Jones <lee.jones@linaro.org >
Cc: linux-leds@vger.kernel.org
Cc: linux-rtc@vger.kernel.org
Cc: linux-usb@vger.kernel.org
Cc: linux-wpan@vger.kernel.org
Cc: Maxime Coquelin <mcoquelin.stm32@gmail.com >
Cc: Pavel Machek <pavel@ucw.cz >
Cc: Peter Oberparleiter <oberpar@linux.ibm.com >
Cc: "Rafael J. Wysocki" <rafael@kernel.org >
Cc: Stefan Schmidt <stefan@datenfreihafen.org >
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com >
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com >
Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com >
Link: https://lore.kernel.org/r/20190723221838.12024-2-suzuki.poulose@arm.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-07-30 13:07:41 +02:00
Heikki Krogerus
fde777791e
device connection: Find connections also by checking the references
...
We can also use this API to find named references that the
device nodes have by using fwnode_property_get_reference_args()
function.
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Tested-by: Hans de Goede <hdegoede@redhat.com >
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com >
2019-06-03 10:55:38 +02:00
Heikki Krogerus
ec69e9533c
usb: roles: Find the muxes by also matching against the device node
...
When the connections are defined in firmware, struct
device_connection will have the fwnode member pointing to
the device node (struct fwnode_handle) of the requested
device, and the endpoint will not be used at all in that
case.
Acked-by: Hans de Goede <hdegoede@redhat.com >
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com >
Reviewed-by: Jun Li <jun.li@nxp.com >
Tested-by: Jun Li <jun.li@nxp.com >
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2019-02-14 10:52:25 +01:00
Heikki Krogerus
c3788cd996
usb: roles: Add a description for the class to Kconfig
...
That makes the USB role switch support option visible and
selectable for the user. The class driver is also moved to
drivers/usb/roles/ directory.
This will fix an issue that we have with the Intel USB role
switch driver on systems that don't have USB Type-C connectors:
Intel USB role switch driver depends on the USB role switch
class as it should, but since there was no way for the user
to enable the USB role switch class, there was also no way
to select that driver. USB Type-C drivers select the USB
role switch class which makes the Intel USB role switch
driver available and therefore hides the problem.
So in practice Intel USB role switch driver was depending on
USB Type-C drivers.
Fixes: f6fb9ec02b
("usb: roles: Add Intel xHCI USB role switch driver")
Cc: <stable@vger.kernel.org >
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com >
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org >
2018-12-17 14:07:59 +01:00