RE: [PATCH v12 0/4] Add Intel LJCA device driver

Wu, Wentong
2023-09-03T14:39:07Z

Hi Hans,

Thanks

> From: Hans de Goede <hdegoede@redhat.com>
>
> Hi,
>
> On 9/2/23 19:15, Wu, Wentong wrote:
> > Hi Hans,
> >
> > Thanks
> >
> >> From: Hans de Goede <hdegoede@redhat.com>
> >>
> >> Hi,
> >>
> >> On 9/1/23 07:36, Wentong Wu wrote:
> >>> Add driver for Intel La Jolla Cove Adapter (LJCA) device. This is a
> >>> USB-GPIO, USB-I2C and USB-SPI device. We add 4 drivers to support
> >>> this
> >>> device: a USB driver, a GPIO chip driver, a I2C controller driver
> >>> and a SPI controller driver.
> >>
> >> Thanks. I've been testing this on a Lenovo X1 ThinkPad Yoga gen 8
> >> with an
> >> ov2740 sensor connected to the LJCA device.
> >
> > Thanks, and I don’t have this laptop, could you please share your DSDT
> > so that I can understand it more?
>
> I have send you an acpidump by private email.
>
> > And I will update this patch set after understand your DSDT and have
> > the patches tested on my setup.
>
> Ok. Note that the out of tree ivsc driver already does uid matching in the i2c-
> driver to fixup the wrong ACPI companion being assigned by the MFD driver, see:
>
> https://github.com/intel/ivsc-driver/blob/main/drivers/i2c/busses/i2c-
> ljca.c#L346

Thanks, there is a little bit change based on your patch, because since RPL
the UID becomes "Name (_UID, "VIC0")" style. Could you please revisit
below code?

static int ljca_match_device_ids(struct acpi_device *adev, void *data)
{
struct ljca_match_ids_walk_data *wd = data;
const char *uid = acpi_device_uid(adev);

if (acpi_match_device_ids(adev, wd->ids))
return 0;

if (!wd->uid)
goto match;

if (!uid)
uid = "0";
else
uid = memchr(uid, wd->uid[0], strlen(uid));

if (!uid || strcmp(uid, wd->uid))
return 0;

match:
wd->adev = adev;

return 1;
}

Thanks
Wentong
>
> For upstream it seemed cleaner to me to directly pick the correct ACPI

Thanks

> companion at aux-device instantiation, something which was not possible with
> the MFD approach but is possible with the auxilary bus approach.
>
> And the other change which I'm proposing has already been merged into the out
> of tree version of the LJCA i2c driver:
>
> https://github.com/intel/ivsc-
> driver/commit/70d95269169cf9e452580b0c15471829df4a6d59
>
> Regards,
>
> Hans
>
>
>
>
>
>
> >> I needed 2 small(ish) fixes to make everything work there.
> >> I have attached the 2 fixes here.
> >>
> >> With these 2 fixes this series is:
> >>
> >> Tested-by: Hans de Goede <hdegoede@redhat.com>
> >
> > Thanks a lot
> >
> > BR,
> > Wentong
> >>
> >> Regards,
> >>
> >> Hans
> >>
> >>
> >>
> >>
> >>
> >>> ---
> >>> v12:
> >>> - switch dev_err to dev_dbg for i2c-ljca driver
> >>> - avoid err printing because of calling usb_kill_urb when attempts
> >>> to resubmit the rx urb
> >>>
> >>> v11:
> >>> - switch dev_err to dev_dbg for i2c-ljca driver
> >>> - remove message length check because of defined quirk structure
> >>> - remove I2C_FUNC_SMBUS_EMUL support
> >>>
> >>> v10:
> >>> - remove ljca_i2c_format_slave_addr
> >>> - remove memset before write write w_packet
> >>> - make ljca_i2c_stop void and print err message in case failure
> >>> - use dev_err_probe in ljca_i2c_probe function
> >>>
> >>> v9:
> >>> - overhaul usb-ljca driver to make it more structured and easy
> >>> understand
> >>> - fix memory leak issue for usb-ljca driver
> >>> - add spinlock to protect tx_buf and ex_buf
> >>> - change exported APIs for usb-ljca driver
> >>> - unify prefix for structures and functions for i2c-ljca driver
> >>> - unify prefix for structures and functions for spi-ljca driver
> >>> - unify prefix for structures and functions for gpio-ljca driver
> >>> - update gpio-ljca, i2c-ljca and spi-ljca drivers according to
> >>> usb-ljca's changes
> >>>
> >>> Wentong Wu (4):
> >>> usb: Add support for Intel LJCA device
> >>> i2c: Add support for Intel LJCA USB I2C driver
> >>> spi: Add support for Intel LJCA USB SPI driver
> >>> gpio: update Intel LJCA USB GPIO driver
> >>>
> >>> drivers/gpio/Kconfig | 4 +-
> >>> drivers/gpio/gpio-ljca.c | 246 +++++++------
> >>> drivers/i2c/busses/Kconfig | 11 +
> >>> drivers/i2c/busses/Makefile | 1 +
> >>> drivers/i2c/busses/i2c-ljca.c | 326 +++++++++++++++++
> >>> drivers/spi/Kconfig | 11 +
> >>> drivers/spi/Makefile | 1 +
> >>> drivers/spi/spi-ljca.c | 297 +++++++++++++++
> >>> drivers/usb/misc/Kconfig | 14 +
> >>> drivers/usb/misc/Makefile | 1 +
> >>> drivers/usb/misc/usb-ljca.c | 817
> >> ++++++++++++++++++++++++++++++++++++++++++
> >>> include/linux/usb/ljca.h | 113 ++++++
> >>> 12 files changed, 1737 insertions(+), 105 deletions(-) create mode
> >>> 100644 drivers/i2c/busses/i2c-ljca.c create mode 100644
> >>> drivers/spi/spi-ljca.c create mode 100644
> >>> drivers/usb/misc/usb-ljca.c create mode 100644
> >>> include/linux/usb/ljca.h
> >>>