mbox series

[v12,0/4] Add Intel LJCA device driver

Message ID 1693546577-17824-1-git-send-email-wentong.wu@intel.com (mailing list archive)
Headers show
Series Add Intel LJCA device driver | expand

Message

Wu, Wentong Sept. 1, 2023, 5:36 a.m. UTC
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.

---
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

Comments

Hans de Goede Sept. 2, 2023, 2:58 p.m. UTC | #1
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.

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>

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
>
Wu, Wentong Sept. 2, 2023, 5:15 p.m. UTC | #2
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?

And I will update this patch set after understand your DSDT and have the
patches tested on my setup.

> 
> 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
> >
Hans de Goede Sept. 2, 2023, 7 p.m. UTC | #3
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

For upstream it seemed cleaner to me to directly pick
the correct ACPI 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
>>>
Wu, Wentong Sept. 3, 2023, 2:38 p.m. UTC | #4
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
> >>>