On Tue, 30 May 2023 01:38:17 +0300 andy.shevchenko@xxxxxxxxx wrote: > Mon, May 29, 2023 at 10:07:09AM -0400, Hugo Villeneuve kirjoitti: > > From: Hugo Villeneuve <hvilleneuve@xxxxxxxxxxxx> > > > > Commit 679875d1d880 ("sc16is7xx: Separate GPIOs from modem control lines") > > and commit 21144bab4f11 ("sc16is7xx: Handle modem status lines") > > changed the function of the GPIOs pins to act as modem control > > lines without any possibility of selecting GPIO function. > > > > As a consequence, applications that depends on GPIO lines configured > > by default as GPIO pins no longer work as expected. > > > > Also, the change to select modem control lines function was done only > > for channel A of dual UART variants (752/762). This was not documented > > in the log message. > > > > Allow to specify GPIO or modem control line function in the device > > tree, and for each of the ports (A or B). > > > > Do so by using the new device-tree property named > > "modem-control-line-ports" (property added in separate patch). > > > > When registering GPIO chip controller, mask-out GPIO pins declared as > > modem control lines according to this new "modem-control-line-ports" > > DT property. > > > > Boards that need to have GPIOS configured as modem control lines > > should add that property to their device tree. Here is a list of > > boards using the sc16is7xx driver in their device tree and that may > > need to be modified: > > arm64/boot/dts/freescale/fsl-ls1012a-frdm.dts > > mips/boot/dts/ingenic/cu1830-neo.dts > > mips/boot/dts/ingenic/cu1000-neo.dts > > ... > > > Fixes: 679875d1d880 ("sc16is7xx: Separate GPIOs from modem control lines") > > Fixes: 21144bab4f11 ("sc16is7xx: Handle modem status lines") > > Don't forget to refer to the dependency patches form this series. > (I forgot how it should be done, IIRC the documentation about stable kernel > patches can shed a light on this.) Hi, I will look into it. > ... > > > + switch (mctrl_mask) { > > + case 0: > > + s->gpio_valid_mask = 0xFF; > > GENMASK() > > > + break; > > + case SC16IS7XX_IOCONTROL_MODEM_A_BIT: > > + s->gpio_valid_mask = 0x0F; > > GENMASK() > > > + break; > > + case SC16IS7XX_IOCONTROL_MODEM_B_BIT: > > + s->gpio_valid_mask = 0xF0; > > GENMASK() Ok done, altough even if in general I like the bit manipulation macros because they make the code easier to read/understand, I find it less obvious by using GENMASK in this case IMMO. > > + break; > > + default: > > + break; > > + } > > ... > > > + of_property_for_each_u32(dev->of_node, "nxp,modem-control-line-ports", > > + prop, p, u) { > > + if (u >= devtype->nr_uart) > > + continue; > > + > > + /* Use GPIO lines as modem control lines */ > > + if (u == 0) > > + mctrl_mask |= SC16IS7XX_IOCONTROL_MODEM_A_BIT; > > + else if (u == 1) > > + mctrl_mask |= SC16IS7XX_IOCONTROL_MODEM_B_BIT; > > + } > > Can we use device properties, please? I have converted this section to use device_property_count_u32() and device_property_read_u32_array(). Is that Ok? > If you think about backporting to the earlier kernels (w/o properties in use in > this driver), perhaps an additional followup for that? I am not sure what you mean by this?