patch "USB: apple-mfi-fastcharge: don't probe unhandled devices" added to usb-linus
Subsystems (3)
This is a note to let you know that I've just added the patch titled
USB: apple-mfi-fastcharge: don't probe unhandled devices
to my usb git tree which can be found at
git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git
in the usb-linus branch.
The patch will show up in the next release of the linux-next tree (usually sometime within the next 24 hours during the week.)
The patch will hopefully also be merged in Linus's tree for the next -rc kernel release.
If you have any questions about this process, please let me know.
From 0cb686692fd200db12dcfb8231e793c1c98aec41 Mon Sep 17 00:00:00 2001
From: Bastien Nocera <[email protected]>
Date: Thu, 22 Oct 2020 09:55:21 -0400
Subject: USB: apple-mfi-fastcharge: don't probe unhandled devices
From: Bastien Nocera <[email protected]>
Contrary to the comment above the id table, we didn't implement a match function. This meant that every single Apple device that was already plugged in to the computer would have its device driver reprobed when the apple-mfi-fastcharge driver was loaded, eg. the SD card reader could be reprobed when the apple-mfi-fastcharge after pivoting root during boot up and the module became available.
Make sure that the driver probe isn't being run for unsupported devices by adding a match function that checks the product ID, in addition to the id_table checking the vendor ID.
--- drivers/usb/misc/apple-mfi-fastcharge.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-)
drivers/usb/misc/apple-mfi-fastcharge.c +12 -5
@@ -163,17 +163,23 @@ static const struct power_supply_desc apple_mfi_fc_desc = { .property_is_writeable = apple_mfi_fc_property_is_writeable }; +static bool mfi_fc_match (struct usb_device *udev) +{ +int idProduct; + + idProduct =le16_to_cpu (udev->descriptor.idProduct); +/* See comment above mfi_fc_id_table[] */ +return (idProduct >=0x1200 && idProduct <=0x12ff ); +} +static int mfi_fc_probe (struct usb_device *udev) {struct power_supply_config battery_cfg = {};struct mfi_device *mfi =NULL ; -int err, idProduct; +int err; - idProduct =le16_to_cpu (udev->descriptor.idProduct); -/* See comment above mfi_fc_id_table[] */ -if (idProduct <0x1200 || idProduct >0x12ff ) { +if (!mfi_fc_match (udev))return -ENODEV ; - } mfi =kzalloc (sizeof (struct mfi_device ),GFP_KERNEL );if (!mfi) {
@@ -220,6 +226,7 @@ static struct usb_device_driver mfi_fc_driver = { .probe = mfi_fc_probe, .disconnect = mfi_fc_disconnect, .id_table = mfi_fc_id_table, + .match = mfi_fc_match, .generic_subclass = 1, };
Signature · 1 line
2.29.1