diff mbox series

[v8,02/11] mfd: sy7636a: Initial commit

Message ID 20210803084456.198-2-alistair@alistair23.me
State New
Headers show
Series None | expand

Commit Message

Alistair Aug. 3, 2021, 8:44 a.m. UTC
Initial support for the Silergy SY7636A Power Management chip.

Signed-off-by: Alistair Francis <alistair@alistair23.me>
---
 drivers/mfd/Kconfig         |  9 +++++
 drivers/mfd/Makefile        |  1 +
 drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++
 include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++
 4 files changed, 127 insertions(+)
 create mode 100644 drivers/mfd/sy7636a.c
 create mode 100644 include/linux/mfd/sy7636a.h

Comments

Alistair Francis Aug. 4, 2021, 8:22 a.m. UTC | #1
On Tue, Aug 3, 2021 at 11:16 PM Lee Jones <lee.jones@linaro.org> wrote:
>

> On Tue, 03 Aug 2021, Alistair Francis wrote:

>

> > Initial support for the Silergy SY7636A Power Management chip.

> >

> > Signed-off-by: Alistair Francis <alistair@alistair23.me>

> > ---

> >  drivers/mfd/Kconfig         |  9 +++++

> >  drivers/mfd/Makefile        |  1 +

> >  drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++

> >  include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++

> >  4 files changed, 127 insertions(+)

> >  create mode 100644 drivers/mfd/sy7636a.c

> >  create mode 100644 include/linux/mfd/sy7636a.h

> >

> > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig

> > index 6a3fd2d75f96..b82208f0c79c 100644

> > --- a/drivers/mfd/Kconfig

> > +++ b/drivers/mfd/Kconfig

> > @@ -1352,6 +1352,15 @@ config MFD_SYSCON

> >         Select this option to enable accessing system control registers

> >         via regmap.

> >

> > +config MFD_SY7636A

> > +     tristate "Silergy SY7636A Power Management IC"

> > +     select MFD_CORE

> > +     select REGMAP_I2C

> > +     depends on I2C

> > +     help

> > +       Select this option to enable support for the Silergy SY7636A

> > +       Power Management IC.

> > +

> >  config MFD_DAVINCI_VOICECODEC

> >       tristate

> >       select MFD_CORE

> > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile

> > index 8116c19d5fd4..cbe581e87fa9 100644

> > --- a/drivers/mfd/Makefile

> > +++ b/drivers/mfd/Makefile

> > @@ -266,6 +266,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU)      += khadas-mcu.o

> >  obj-$(CONFIG_MFD_ACER_A500_EC)       += acer-ec-a500.o

> >  obj-$(CONFIG_MFD_QCOM_PM8008)        += qcom-pm8008.o

> >

> > +obj-$(CONFIG_MFD_SY7636A)    += sy7636a.o

> >  obj-$(CONFIG_SGI_MFD_IOC3)   += ioc3.o

> >  obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)     += simple-mfd-i2c.o

> >  obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o

> > diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c

> > new file mode 100644

> > index 000000000000..f3ff93c7395d

> > --- /dev/null

> > +++ b/drivers/mfd/sy7636a.c

> > @@ -0,0 +1,72 @@

> > +// SPDX-License-Identifier: GPL-2.0+

> > +/*

> > + * MFD parent driver for SY7636A chip

> > + *

> > + * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/

> > + *

> > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>

> > + *          Alistair Francis <alistair@alistair23.me>

> > + *

> > + * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>

> > + */

> > +

> > +#include <linux/interrupt.h>

> > +#include <linux/mfd/core.h>

> > +#include <linux/module.h>

> > +#include <linux/of_device.h>

> > +

> > +#include <linux/mfd/sy7636a.h>

> > +

> > +static const struct regmap_config sy7636a_regmap_config = {

> > +     .reg_bits = 8,

> > +     .val_bits = 8,

> > +};

> > +

> > +static const struct mfd_cell sy7636a_cells[] = {

> > +     { .name = "sy7636a-regulator", },

>

> What kind of regulator is 'vcom'? LDO? DCDC?


Both I guess:

"SY7636A is a single-chip power management IC (PMIC) designed for
electronic paper display (EPD) applications. The device supports panel
sizes up to 9.7 inches and larger. The device integrates two
high-efficiency DC-DC boost converters, which are boosted to 25V and
-20V by two charge pumps to provide gate driver power for the panel.
Two tracking LDOs create a ±15V source driver power supply that
supports output currents up to 200mA. SY7636A also provides I2C
interface control for specific panel requirements"

Alistair

>

> > +     { .name = "sy7636a-temperature", },

> > +     { .name = "sy7636a-thermal", },

> > +};

>

> --

> Lee Jones [李琼斯]

> Senior Technical Lead - Developer Services

> Linaro.org │ Open source software for Arm SoCs

> Follow Linaro: Facebook | Twitter | Blog
Lee Jones Aug. 4, 2021, 9:06 a.m. UTC | #2
On Wed, 04 Aug 2021, Alistair Francis wrote:

> On Tue, Aug 3, 2021 at 11:16 PM Lee Jones <lee.jones@linaro.org> wrote:

> >

> > On Tue, 03 Aug 2021, Alistair Francis wrote:

> >

> > > Initial support for the Silergy SY7636A Power Management chip.

> > >

> > > Signed-off-by: Alistair Francis <alistair@alistair23.me>

> > > ---

> > >  drivers/mfd/Kconfig         |  9 +++++

> > >  drivers/mfd/Makefile        |  1 +

> > >  drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++

> > >  include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++

> > >  4 files changed, 127 insertions(+)

> > >  create mode 100644 drivers/mfd/sy7636a.c

> > >  create mode 100644 include/linux/mfd/sy7636a.h

> > >

> > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig

> > > index 6a3fd2d75f96..b82208f0c79c 100644

> > > --- a/drivers/mfd/Kconfig

> > > +++ b/drivers/mfd/Kconfig

> > > @@ -1352,6 +1352,15 @@ config MFD_SYSCON

> > >         Select this option to enable accessing system control registers

> > >         via regmap.

> > >

> > > +config MFD_SY7636A

> > > +     tristate "Silergy SY7636A Power Management IC"

> > > +     select MFD_CORE

> > > +     select REGMAP_I2C

> > > +     depends on I2C

> > > +     help

> > > +       Select this option to enable support for the Silergy SY7636A

> > > +       Power Management IC.

> > > +

> > >  config MFD_DAVINCI_VOICECODEC

> > >       tristate

> > >       select MFD_CORE

> > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile

> > > index 8116c19d5fd4..cbe581e87fa9 100644

> > > --- a/drivers/mfd/Makefile

> > > +++ b/drivers/mfd/Makefile

> > > @@ -266,6 +266,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU)      += khadas-mcu.o

> > >  obj-$(CONFIG_MFD_ACER_A500_EC)       += acer-ec-a500.o

> > >  obj-$(CONFIG_MFD_QCOM_PM8008)        += qcom-pm8008.o

> > >

> > > +obj-$(CONFIG_MFD_SY7636A)    += sy7636a.o

> > >  obj-$(CONFIG_SGI_MFD_IOC3)   += ioc3.o

> > >  obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)     += simple-mfd-i2c.o

> > >  obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o

> > > diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c

> > > new file mode 100644

> > > index 000000000000..f3ff93c7395d

> > > --- /dev/null

> > > +++ b/drivers/mfd/sy7636a.c

> > > @@ -0,0 +1,72 @@

> > > +// SPDX-License-Identifier: GPL-2.0+

> > > +/*

> > > + * MFD parent driver for SY7636A chip

> > > + *

> > > + * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/

> > > + *

> > > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>

> > > + *          Alistair Francis <alistair@alistair23.me>

> > > + *

> > > + * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>

> > > + */

> > > +

> > > +#include <linux/interrupt.h>

> > > +#include <linux/mfd/core.h>

> > > +#include <linux/module.h>

> > > +#include <linux/of_device.h>

> > > +

> > > +#include <linux/mfd/sy7636a.h>

> > > +

> > > +static const struct regmap_config sy7636a_regmap_config = {

> > > +     .reg_bits = 8,

> > > +     .val_bits = 8,

> > > +};

> > > +

> > > +static const struct mfd_cell sy7636a_cells[] = {

> > > +     { .name = "sy7636a-regulator", },

> >

> > What kind of regulator is 'vcom'? LDO? DCDC?

> 

> Both I guess:

> 

> "SY7636A is a single-chip power management IC (PMIC) designed for

> electronic paper display (EPD) applications. The device supports panel

> sizes up to 9.7 inches and larger. The device integrates two

> high-efficiency DC-DC boost converters, which are boosted to 25V and

> -20V by two charge pumps to provide gate driver power for the panel.

> Two tracking LDOs create a ±15V source driver power supply that

> supports output currents up to 200mA. SY7636A also provides I2C

> interface control for specific panel requirements"


Is there a datasheet I could look at?

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
Alistair Francis Aug. 4, 2021, 9:37 a.m. UTC | #3
On Wed, Aug 4, 2021 at 7:06 PM Lee Jones <lee.jones@linaro.org> wrote:
>

> On Wed, 04 Aug 2021, Alistair Francis wrote:

>

> > On Tue, Aug 3, 2021 at 11:16 PM Lee Jones <lee.jones@linaro.org> wrote:

> > >

> > > On Tue, 03 Aug 2021, Alistair Francis wrote:

> > >

> > > > Initial support for the Silergy SY7636A Power Management chip.

> > > >

> > > > Signed-off-by: Alistair Francis <alistair@alistair23.me>

> > > > ---

> > > >  drivers/mfd/Kconfig         |  9 +++++

> > > >  drivers/mfd/Makefile        |  1 +

> > > >  drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++

> > > >  include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++

> > > >  4 files changed, 127 insertions(+)

> > > >  create mode 100644 drivers/mfd/sy7636a.c

> > > >  create mode 100644 include/linux/mfd/sy7636a.h

> > > >

> > > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig

> > > > index 6a3fd2d75f96..b82208f0c79c 100644

> > > > --- a/drivers/mfd/Kconfig

> > > > +++ b/drivers/mfd/Kconfig

> > > > @@ -1352,6 +1352,15 @@ config MFD_SYSCON

> > > >         Select this option to enable accessing system control registers

> > > >         via regmap.

> > > >

> > > > +config MFD_SY7636A

> > > > +     tristate "Silergy SY7636A Power Management IC"

> > > > +     select MFD_CORE

> > > > +     select REGMAP_I2C

> > > > +     depends on I2C

> > > > +     help

> > > > +       Select this option to enable support for the Silergy SY7636A

> > > > +       Power Management IC.

> > > > +

> > > >  config MFD_DAVINCI_VOICECODEC

> > > >       tristate

> > > >       select MFD_CORE

> > > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile

> > > > index 8116c19d5fd4..cbe581e87fa9 100644

> > > > --- a/drivers/mfd/Makefile

> > > > +++ b/drivers/mfd/Makefile

> > > > @@ -266,6 +266,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU)      += khadas-mcu.o

> > > >  obj-$(CONFIG_MFD_ACER_A500_EC)       += acer-ec-a500.o

> > > >  obj-$(CONFIG_MFD_QCOM_PM8008)        += qcom-pm8008.o

> > > >

> > > > +obj-$(CONFIG_MFD_SY7636A)    += sy7636a.o

> > > >  obj-$(CONFIG_SGI_MFD_IOC3)   += ioc3.o

> > > >  obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)     += simple-mfd-i2c.o

> > > >  obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o

> > > > diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c

> > > > new file mode 100644

> > > > index 000000000000..f3ff93c7395d

> > > > --- /dev/null

> > > > +++ b/drivers/mfd/sy7636a.c

> > > > @@ -0,0 +1,72 @@

> > > > +// SPDX-License-Identifier: GPL-2.0+

> > > > +/*

> > > > + * MFD parent driver for SY7636A chip

> > > > + *

> > > > + * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/

> > > > + *

> > > > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>

> > > > + *          Alistair Francis <alistair@alistair23.me>

> > > > + *

> > > > + * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>

> > > > + */

> > > > +

> > > > +#include <linux/interrupt.h>

> > > > +#include <linux/mfd/core.h>

> > > > +#include <linux/module.h>

> > > > +#include <linux/of_device.h>

> > > > +

> > > > +#include <linux/mfd/sy7636a.h>

> > > > +

> > > > +static const struct regmap_config sy7636a_regmap_config = {

> > > > +     .reg_bits = 8,

> > > > +     .val_bits = 8,

> > > > +};

> > > > +

> > > > +static const struct mfd_cell sy7636a_cells[] = {

> > > > +     { .name = "sy7636a-regulator", },

> > >

> > > What kind of regulator is 'vcom'? LDO? DCDC?

> >

> > Both I guess:

> >

> > "SY7636A is a single-chip power management IC (PMIC) designed for

> > electronic paper display (EPD) applications. The device supports panel

> > sizes up to 9.7 inches and larger. The device integrates two

> > high-efficiency DC-DC boost converters, which are boosted to 25V and

> > -20V by two charge pumps to provide gate driver power for the panel.

> > Two tracking LDOs create a ±15V source driver power supply that

> > supports output currents up to 200mA. SY7636A also provides I2C

> > interface control for specific panel requirements"

>

> Is there a datasheet I could look at?


I have managed to find this:

https://www.silergy.com/cn/productsview/SY7636ARMC

which is in Chinese. The datasheet is behind a login page unfortunately.

Alistair

>

> --

> Lee Jones [李琼斯]

> Senior Technical Lead - Developer Services

> Linaro.org │ Open source software for Arm SoCs

> Follow Linaro: Facebook | Twitter | Blog
Lee Jones Aug. 4, 2021, 10:28 a.m. UTC | #4
On Wed, 04 Aug 2021, Alistair Francis wrote:

> On Wed, Aug 4, 2021 at 7:06 PM Lee Jones <lee.jones@linaro.org> wrote:

> >

> > On Wed, 04 Aug 2021, Alistair Francis wrote:

> >

> > > On Tue, Aug 3, 2021 at 11:16 PM Lee Jones <lee.jones@linaro.org> wrote:

> > > >

> > > > On Tue, 03 Aug 2021, Alistair Francis wrote:

> > > >

> > > > > Initial support for the Silergy SY7636A Power Management chip.

> > > > >

> > > > > Signed-off-by: Alistair Francis <alistair@alistair23.me>

> > > > > ---

> > > > >  drivers/mfd/Kconfig         |  9 +++++

> > > > >  drivers/mfd/Makefile        |  1 +

> > > > >  drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++

> > > > >  include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++

> > > > >  4 files changed, 127 insertions(+)

> > > > >  create mode 100644 drivers/mfd/sy7636a.c

> > > > >  create mode 100644 include/linux/mfd/sy7636a.h

> > > > >

> > > > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig

> > > > > index 6a3fd2d75f96..b82208f0c79c 100644

> > > > > --- a/drivers/mfd/Kconfig

> > > > > +++ b/drivers/mfd/Kconfig

> > > > > @@ -1352,6 +1352,15 @@ config MFD_SYSCON

> > > > >         Select this option to enable accessing system control registers

> > > > >         via regmap.

> > > > >

> > > > > +config MFD_SY7636A

> > > > > +     tristate "Silergy SY7636A Power Management IC"

> > > > > +     select MFD_CORE

> > > > > +     select REGMAP_I2C

> > > > > +     depends on I2C

> > > > > +     help

> > > > > +       Select this option to enable support for the Silergy SY7636A

> > > > > +       Power Management IC.

> > > > > +

> > > > >  config MFD_DAVINCI_VOICECODEC

> > > > >       tristate

> > > > >       select MFD_CORE

> > > > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile

> > > > > index 8116c19d5fd4..cbe581e87fa9 100644

> > > > > --- a/drivers/mfd/Makefile

> > > > > +++ b/drivers/mfd/Makefile

> > > > > @@ -266,6 +266,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU)      += khadas-mcu.o

> > > > >  obj-$(CONFIG_MFD_ACER_A500_EC)       += acer-ec-a500.o

> > > > >  obj-$(CONFIG_MFD_QCOM_PM8008)        += qcom-pm8008.o

> > > > >

> > > > > +obj-$(CONFIG_MFD_SY7636A)    += sy7636a.o

> > > > >  obj-$(CONFIG_SGI_MFD_IOC3)   += ioc3.o

> > > > >  obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)     += simple-mfd-i2c.o

> > > > >  obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o

> > > > > diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c

> > > > > new file mode 100644

> > > > > index 000000000000..f3ff93c7395d

> > > > > --- /dev/null

> > > > > +++ b/drivers/mfd/sy7636a.c

> > > > > @@ -0,0 +1,72 @@

> > > > > +// SPDX-License-Identifier: GPL-2.0+

> > > > > +/*

> > > > > + * MFD parent driver for SY7636A chip

> > > > > + *

> > > > > + * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/

> > > > > + *

> > > > > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>

> > > > > + *          Alistair Francis <alistair@alistair23.me>

> > > > > + *

> > > > > + * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>

> > > > > + */

> > > > > +

> > > > > +#include <linux/interrupt.h>

> > > > > +#include <linux/mfd/core.h>

> > > > > +#include <linux/module.h>

> > > > > +#include <linux/of_device.h>

> > > > > +

> > > > > +#include <linux/mfd/sy7636a.h>

> > > > > +

> > > > > +static const struct regmap_config sy7636a_regmap_config = {

> > > > > +     .reg_bits = 8,

> > > > > +     .val_bits = 8,

> > > > > +};

> > > > > +

> > > > > +static const struct mfd_cell sy7636a_cells[] = {

> > > > > +     { .name = "sy7636a-regulator", },

> > > >

> > > > What kind of regulator is 'vcom'? LDO? DCDC?

> > >

> > > Both I guess:

> > >

> > > "SY7636A is a single-chip power management IC (PMIC) designed for

> > > electronic paper display (EPD) applications. The device supports panel

> > > sizes up to 9.7 inches and larger. The device integrates two

> > > high-efficiency DC-DC boost converters, which are boosted to 25V and

> > > -20V by two charge pumps to provide gate driver power for the panel.

> > > Two tracking LDOs create a ±15V source driver power supply that

> > > supports output currents up to 200mA. SY7636A also provides I2C

> > > interface control for specific panel requirements"

> >

> > Is there a datasheet I could look at?

> 

> I have managed to find this:

> 

> https://www.silergy.com/cn/productsview/SY7636ARMC

> 

> which is in Chinese. The datasheet is behind a login page unfortunately.


Where did the snippet above come from then?

What documentation are you working to?

-- 
Lee Jones [李琼斯]
Senior Technical Lead - Developer Services
Linaro.org │ Open source software for Arm SoCs
Follow Linaro: Facebook | Twitter | Blog
Alistair Francis Aug. 4, 2021, 10:35 a.m. UTC | #5
On Wed, Aug 4, 2021 at 8:28 PM Lee Jones <lee.jones@linaro.org> wrote:
>

> On Wed, 04 Aug 2021, Alistair Francis wrote:

>

> > On Wed, Aug 4, 2021 at 7:06 PM Lee Jones <lee.jones@linaro.org> wrote:

> > >

> > > On Wed, 04 Aug 2021, Alistair Francis wrote:

> > >

> > > > On Tue, Aug 3, 2021 at 11:16 PM Lee Jones <lee.jones@linaro.org> wrote:

> > > > >

> > > > > On Tue, 03 Aug 2021, Alistair Francis wrote:

> > > > >

> > > > > > Initial support for the Silergy SY7636A Power Management chip.

> > > > > >

> > > > > > Signed-off-by: Alistair Francis <alistair@alistair23.me>

> > > > > > ---

> > > > > >  drivers/mfd/Kconfig         |  9 +++++

> > > > > >  drivers/mfd/Makefile        |  1 +

> > > > > >  drivers/mfd/sy7636a.c       | 72 +++++++++++++++++++++++++++++++++++++

> > > > > >  include/linux/mfd/sy7636a.h | 45 +++++++++++++++++++++++

> > > > > >  4 files changed, 127 insertions(+)

> > > > > >  create mode 100644 drivers/mfd/sy7636a.c

> > > > > >  create mode 100644 include/linux/mfd/sy7636a.h

> > > > > >

> > > > > > diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig

> > > > > > index 6a3fd2d75f96..b82208f0c79c 100644

> > > > > > --- a/drivers/mfd/Kconfig

> > > > > > +++ b/drivers/mfd/Kconfig

> > > > > > @@ -1352,6 +1352,15 @@ config MFD_SYSCON

> > > > > >         Select this option to enable accessing system control registers

> > > > > >         via regmap.

> > > > > >

> > > > > > +config MFD_SY7636A

> > > > > > +     tristate "Silergy SY7636A Power Management IC"

> > > > > > +     select MFD_CORE

> > > > > > +     select REGMAP_I2C

> > > > > > +     depends on I2C

> > > > > > +     help

> > > > > > +       Select this option to enable support for the Silergy SY7636A

> > > > > > +       Power Management IC.

> > > > > > +

> > > > > >  config MFD_DAVINCI_VOICECODEC

> > > > > >       tristate

> > > > > >       select MFD_CORE

> > > > > > diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile

> > > > > > index 8116c19d5fd4..cbe581e87fa9 100644

> > > > > > --- a/drivers/mfd/Makefile

> > > > > > +++ b/drivers/mfd/Makefile

> > > > > > @@ -266,6 +266,7 @@ obj-$(CONFIG_MFD_KHADAS_MCU)      += khadas-mcu.o

> > > > > >  obj-$(CONFIG_MFD_ACER_A500_EC)       += acer-ec-a500.o

> > > > > >  obj-$(CONFIG_MFD_QCOM_PM8008)        += qcom-pm8008.o

> > > > > >

> > > > > > +obj-$(CONFIG_MFD_SY7636A)    += sy7636a.o

> > > > > >  obj-$(CONFIG_SGI_MFD_IOC3)   += ioc3.o

> > > > > >  obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)     += simple-mfd-i2c.o

> > > > > >  obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o

> > > > > > diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c

> > > > > > new file mode 100644

> > > > > > index 000000000000..f3ff93c7395d

> > > > > > --- /dev/null

> > > > > > +++ b/drivers/mfd/sy7636a.c

> > > > > > @@ -0,0 +1,72 @@

> > > > > > +// SPDX-License-Identifier: GPL-2.0+

> > > > > > +/*

> > > > > > + * MFD parent driver for SY7636A chip

> > > > > > + *

> > > > > > + * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/

> > > > > > + *

> > > > > > + * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>

> > > > > > + *          Alistair Francis <alistair@alistair23.me>

> > > > > > + *

> > > > > > + * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>

> > > > > > + */

> > > > > > +

> > > > > > +#include <linux/interrupt.h>

> > > > > > +#include <linux/mfd/core.h>

> > > > > > +#include <linux/module.h>

> > > > > > +#include <linux/of_device.h>

> > > > > > +

> > > > > > +#include <linux/mfd/sy7636a.h>

> > > > > > +

> > > > > > +static const struct regmap_config sy7636a_regmap_config = {

> > > > > > +     .reg_bits = 8,

> > > > > > +     .val_bits = 8,

> > > > > > +};

> > > > > > +

> > > > > > +static const struct mfd_cell sy7636a_cells[] = {

> > > > > > +     { .name = "sy7636a-regulator", },

> > > > >

> > > > > What kind of regulator is 'vcom'? LDO? DCDC?

> > > >

> > > > Both I guess:

> > > >

> > > > "SY7636A is a single-chip power management IC (PMIC) designed for

> > > > electronic paper display (EPD) applications. The device supports panel

> > > > sizes up to 9.7 inches and larger. The device integrates two

> > > > high-efficiency DC-DC boost converters, which are boosted to 25V and

> > > > -20V by two charge pumps to provide gate driver power for the panel.

> > > > Two tracking LDOs create a ±15V source driver power supply that

> > > > supports output currents up to 200mA. SY7636A also provides I2C

> > > > interface control for specific panel requirements"

> > >

> > > Is there a datasheet I could look at?

> >

> > I have managed to find this:

> >

> > https://www.silergy.com/cn/productsview/SY7636ARMC

> >

> > which is in Chinese. The datasheet is behind a login page unfortunately.

>

> Where did the snippet above come from then?


It's the translation of the above link.

>

> What documentation are you working to?


It's based on the vendor driver and then testing on hardware.

Alistair

>

> --

> Lee Jones [李琼斯]

> Senior Technical Lead - Developer Services

> Linaro.org │ Open source software for Arm SoCs

> Follow Linaro: Facebook | Twitter | Blog
diff mbox series

Patch

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index 6a3fd2d75f96..b82208f0c79c 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -1352,6 +1352,15 @@  config MFD_SYSCON
 	  Select this option to enable accessing system control registers
 	  via regmap.
 
+config MFD_SY7636A
+	tristate "Silergy SY7636A Power Management IC"
+	select MFD_CORE
+	select REGMAP_I2C
+	depends on I2C
+	help
+	  Select this option to enable support for the Silergy SY7636A
+	  Power Management IC.
+
 config MFD_DAVINCI_VOICECODEC
 	tristate
 	select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 8116c19d5fd4..cbe581e87fa9 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -266,6 +266,7 @@  obj-$(CONFIG_MFD_KHADAS_MCU) 	+= khadas-mcu.o
 obj-$(CONFIG_MFD_ACER_A500_EC)	+= acer-ec-a500.o
 obj-$(CONFIG_MFD_QCOM_PM8008)	+= qcom-pm8008.o
 
+obj-$(CONFIG_MFD_SY7636A)	+= sy7636a.o
 obj-$(CONFIG_SGI_MFD_IOC3)	+= ioc3.o
 obj-$(CONFIG_MFD_SIMPLE_MFD_I2C)	+= simple-mfd-i2c.o
 obj-$(CONFIG_MFD_INTEL_M10_BMC)   += intel-m10-bmc.o
diff --git a/drivers/mfd/sy7636a.c b/drivers/mfd/sy7636a.c
new file mode 100644
index 000000000000..f3ff93c7395d
--- /dev/null
+++ b/drivers/mfd/sy7636a.c
@@ -0,0 +1,72 @@ 
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * MFD parent driver for SY7636A chip
+ *
+ * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/
+ *
+ * Authors: Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>
+ *          Alistair Francis <alistair@alistair23.me>
+ *
+ * Based on the lp87565 driver by Keerthy <j-keerthy@ti.com>
+ */
+
+#include <linux/interrupt.h>
+#include <linux/mfd/core.h>
+#include <linux/module.h>
+#include <linux/of_device.h>
+
+#include <linux/mfd/sy7636a.h>
+
+static const struct regmap_config sy7636a_regmap_config = {
+	.reg_bits = 8,
+	.val_bits = 8,
+};
+
+static const struct mfd_cell sy7636a_cells[] = {
+	{ .name = "sy7636a-regulator", },
+	{ .name = "sy7636a-temperature", },
+	{ .name = "sy7636a-thermal", },
+};
+
+static int sy7636a_probe(struct i2c_client *client)
+{
+	struct sy7636a *ddata;
+	int ret;
+
+	ddata = devm_kzalloc(&client->dev, sizeof(*ddata), GFP_KERNEL);
+	if (!ddata)
+		return -ENOMEM;
+
+	ddata->regmap = devm_regmap_init_i2c(client, &sy7636a_regmap_config);
+	if (IS_ERR(ddata->regmap)) {
+		ret = PTR_ERR(ddata->regmap);
+		dev_err(&client->dev,
+			"Failed to initialize register map: %d\n", ret);
+		return ret;
+	}
+
+	i2c_set_clientdata(client, ddata);
+
+	return devm_mfd_add_devices(&client->dev, PLATFORM_DEVID_AUTO,
+				    sy7636a_cells, ARRAY_SIZE(sy7636a_cells),
+				    NULL, 0, NULL);
+}
+
+static const struct of_device_id of_sy7636a_match_table[] = {
+	{ .compatible = "silergy,sy7636a", },
+	{}
+};
+MODULE_DEVICE_TABLE(of, of_sy7636a_match_table);
+
+static struct i2c_driver sy7636a_driver = {
+	.driver	= {
+		.name	= "sy7636a",
+		.of_match_table = of_sy7636a_match_table,
+	},
+	.probe_new = sy7636a_probe,
+};
+module_i2c_driver(sy7636a_driver);
+
+MODULE_AUTHOR("Lars Ivar Miljeteig <lars.ivar.miljeteig@remarkable.com>");
+MODULE_DESCRIPTION("Silergy SY7636A Multi-Function Device Driver");
+MODULE_LICENSE("GPL v2");
diff --git a/include/linux/mfd/sy7636a.h b/include/linux/mfd/sy7636a.h
new file mode 100644
index 000000000000..5e9c537fee45
--- /dev/null
+++ b/include/linux/mfd/sy7636a.h
@@ -0,0 +1,45 @@ 
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Functions to access SY3686A power management chip.
+ *
+ * Copyright (C) 2021 reMarkable AS - http://www.remarkable.com/
+ */
+
+#ifndef __MFD_SY7636A_H
+#define __MFD_SY7636A_H
+
+#include <linux/i2c.h>
+#include <linux/regmap.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+
+#define SY7636A_REG_OPERATION_MODE_CRL		0x00
+#define SY7636A_OPERATION_MODE_CRL_VCOMCTL	BIT(6)
+#define SY7636A_OPERATION_MODE_CRL_ONOFF	BIT(7)
+#define SY7636A_REG_VCOM_ADJUST_CTRL_L		0x01
+#define SY7636A_REG_VCOM_ADJUST_CTRL_H		0x02
+#define SY7636A_REG_VCOM_ADJUST_CTRL_MASK	0x01ff
+#define SY7636A_REG_VLDO_VOLTAGE_ADJULST_CTRL	0x03
+#define SY7636A_REG_POWER_ON_DELAY_TIME		0x06
+#define SY7636A_REG_FAULT_FLAG			0x07
+#define SY7636A_FAULT_FLAG_PG			BIT(0)
+#define SY7636A_REG_TERMISTOR_READOUT		0x08
+
+#define SY7636A_REG_MAX				0x08
+
+#define VCOM_MIN		0
+#define VCOM_MAX		5000
+
+#define VCOM_ADJUST_CTRL_MASK	0x1ff
+// Used to shift the high byte
+#define VCOM_ADJUST_CTRL_SHIFT	8
+// Used to scale from VCOM_ADJUST_CTRL to mv
+#define VCOM_ADJUST_CTRL_SCAL	10000
+
+#define FAULT_FLAG_SHIFT	1
+
+struct sy7636a {
+	struct regmap *regmap;
+};
+
+#endif /* __LINUX_MFD_SY7636A_H */