FreeCalypso > hg > freecalypso-hwlab
comparison linux-patch/minpatch-4.9.240/0002-USB-serial-ftdi_sio-pass-port-to-quirk-port_probe-fu.patch @ 83:d7a1e7a6d6ba
linux-patch: current best offering of minpatch-*
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Sun, 06 Dec 2020 02:55:40 +0000 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 82:e2161ac7d641 | 83:d7a1e7a6d6ba |
|---|---|
| 1 From 214b1d2da22e380b05ecf6e546962ca867e3a60e Mon Sep 17 00:00:00 2001 | |
| 2 From: "Mychaela N. Falconia" <falcon@freecalypso.org> | |
| 3 Date: Fri, 2 Oct 2020 17:38:56 +0000 | |
| 4 Subject: [PATCH 2/3] USB: serial: ftdi_sio: pass port to quirk port_probe | |
| 5 functions | |
| 6 | |
| 7 The original code passed only the pointer to the ftdi_private struct | |
| 8 to quirk port_probe functions. However, some quirks may need to be | |
| 9 applied conditionally only to some channels of a multichannel FT2232x | |
| 10 or FT4232H device, and if a given quirk's port_probe function needs | |
| 11 to figure out which channel of a multichannel device is currently | |
| 12 being considered, it needs access to the port pointer passed to the | |
| 13 ftdi_sio_port_probe() function, so it can traverse USB data structures | |
| 14 from there. | |
| 15 | |
| 16 Signed-off-by: Mychaela N. Falconia <falcon@freecalypso.org> | |
| 17 --- | |
| 18 drivers/usb/serial/ftdi_sio.c | 20 ++++++++++++-------- | |
| 19 1 file changed, 12 insertions(+), 8 deletions(-) | |
| 20 | |
| 21 diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c | |
| 22 index c9f979063af1..878ab4e5625c 100644 | |
| 23 --- a/drivers/usb/serial/ftdi_sio.c | |
| 24 +++ b/drivers/usb/serial/ftdi_sio.c | |
| 25 @@ -83,15 +83,15 @@ struct ftdi_private { | |
| 26 struct ftdi_sio_quirk { | |
| 27 int (*probe)(struct usb_serial *); | |
| 28 /* Special settings for probed ports. */ | |
| 29 - void (*port_probe)(struct ftdi_private *); | |
| 30 + void (*port_probe)(struct usb_serial_port *); | |
| 31 }; | |
| 32 | |
| 33 static int ftdi_jtag_probe(struct usb_serial *serial); | |
| 34 static int ftdi_NDI_device_setup(struct usb_serial *serial); | |
| 35 static int ftdi_stmclite_probe(struct usb_serial *serial); | |
| 36 static int ftdi_8u2232c_probe(struct usb_serial *serial); | |
| 37 -static void ftdi_USB_UIRT_setup(struct ftdi_private *priv); | |
| 38 -static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv); | |
| 39 +static void ftdi_USB_UIRT_setup(struct usb_serial_port *port); | |
| 40 +static void ftdi_HE_TIRA1_setup(struct usb_serial_port *port); | |
| 41 | |
| 42 static const struct ftdi_sio_quirk ftdi_jtag_quirk = { | |
| 43 .probe = ftdi_jtag_probe, | |
| 44 @@ -1833,11 +1833,11 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port) | |
| 45 | |
| 46 mutex_init(&priv->cfg_lock); | |
| 47 | |
| 48 - if (quirk && quirk->port_probe) | |
| 49 - quirk->port_probe(priv); | |
| 50 - | |
| 51 usb_set_serial_port_data(port, priv); | |
| 52 | |
| 53 + if (quirk && quirk->port_probe) | |
| 54 + quirk->port_probe(port); | |
| 55 + | |
| 56 ftdi_determine_type(port); | |
| 57 ftdi_set_max_packet_size(port); | |
| 58 if (read_latency_timer(port) < 0) | |
| 59 @@ -1850,8 +1850,10 @@ static int ftdi_sio_port_probe(struct usb_serial_port *port) | |
| 60 /* Setup for the USB-UIRT device, which requires hardwired | |
| 61 * baudrate (38400 gets mapped to 312500) */ | |
| 62 /* Called from usbserial:serial_probe */ | |
| 63 -static void ftdi_USB_UIRT_setup(struct ftdi_private *priv) | |
| 64 +static void ftdi_USB_UIRT_setup(struct usb_serial_port *port) | |
| 65 { | |
| 66 + struct ftdi_private *priv = usb_get_serial_port_data(port); | |
| 67 + | |
| 68 priv->flags |= ASYNC_SPD_CUST; | |
| 69 priv->custom_divisor = 77; | |
| 70 priv->force_baud = 38400; | |
| 71 @@ -1860,8 +1862,10 @@ static void ftdi_USB_UIRT_setup(struct ftdi_private *priv) | |
| 72 /* Setup for the HE-TIRA1 device, which requires hardwired | |
| 73 * baudrate (38400 gets mapped to 100000) and RTS-CTS enabled. */ | |
| 74 | |
| 75 -static void ftdi_HE_TIRA1_setup(struct ftdi_private *priv) | |
| 76 +static void ftdi_HE_TIRA1_setup(struct usb_serial_port *port) | |
| 77 { | |
| 78 + struct ftdi_private *priv = usb_get_serial_port_data(port); | |
| 79 + | |
| 80 priv->flags |= ASYNC_SPD_CUST; | |
| 81 priv->custom_divisor = 240; | |
| 82 priv->force_baud = 38400; | |
| 83 -- | |
| 84 2.9.0 | |
| 85 |
