Re: [PATCH v9 2/3] mfd: add Gateworks System Controller core driver

Lee Jones
2020-05-15T10:54:42Z

On Thu, 30 Apr 2020, Tim Harvey wrote:

> The Gateworks System Controller (GSC) is an I2C slave controller
> implemented with an MSP430 micro-controller whose firmware embeds the
> following features:
> - I/O expander (16 GPIO's) using PCA955x protocol
> - Real Time Clock using DS1672 protocol
> - User EEPROM using AT24 protocol
> - HWMON using custom protocol
> - Interrupt controller with tamper detect, user pushbotton
> - Watchdog controller capable of full board power-cycle
> - Power Control capable of full board power-cycle
>
> see http://trac.gateworks.com/wiki/gsc for more details
>
> Signed-off-by: Tim Harvey <tharvey@gateworks.com>
> ---
> v9:
> - rebase against 5.7-rc2
> - cleanup gsc_powerdown() by using BIT(), put_unaligned_le32(), and avoid
> unnecessary assignments
> - rename GSC_CTRL_1 SLEEP related defines to simplify
> - add better description and sub-module info to driver description
> - whitespace changes per review
> - remove unused irq_data pointer in ddata
> - remove unnecesary i2c_set_clientdata
> - use devm_i2c_new_dummy_device to avoid need of free's
> - change regsiter definitions to enum
> - export gsc_{read,write} instead of sharing them via ddata
>
> v8:
> - whitespace fixes
> - describe sub-devices in Kconfig
> - add error print for invalid command
> - update copyright
> - use devm_of_platform_populate
> - use probe_new
> - move hwmon's regmap init to hwmon
>
> v7:
> - remove irq from private data struct
>
> v6:
> - remove duplicate signature and fix commit log
>
> v5:
> - simplify powerdown function
>
> v4:
> - remove hwmon max reg check/define
> - fix powerdown function
>
> v3:
> - rename gsc->gateworks-gsc
> - remove uncecessary include for linux/mfd/core.h
> - upercase I2C in comments
> - remove i2c debug
> - remove uncecessary comments
> - don't use KBUILD_MODNAME for name
> - remove unnecessary v1/v2/v3 tracking
> - unregister hwmon i2c adapter on remove
>
> v2:
> - change license comment block style
> - remove COMPILE_TEST (Randy)
> - fixed whitespace issues
> - replaced a printk with dev_err
> ---
> MAINTAINERS | 8 ++
> drivers/mfd/Kconfig | 16 +++
> drivers/mfd/Makefile | 1 +
> drivers/mfd/gateworks-gsc.c | 284 ++++++++++++++++++++++++++++++++++++++++++++
> include/linux/mfd/gsc.h | 76 ++++++++++++
> 5 files changed, 385 insertions(+)
> create mode 100644 drivers/mfd/gateworks-gsc.c
> create mode 100644 include/linux/mfd/gsc.h
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index b816a45..035dfb9 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -7032,6 +7032,14 @@ F: kernel/futex.c
> F: tools/perf/bench/futex*
> F: tools/testing/selftests/futex/
>
> +GATEWORKS SYSTEM CONTROLLER (GSC) DRIVER
> +M: Tim Harvey <tharvey@gateworks.com>
> +M: Robert Jones <rjones@gateworks.com>
> +S: Maintained
> +F: Documentation/devicetree/bindings/mfd/gateworks-gsc.yaml
> +F: drivers/mfd/gateworks-gsc.c
> +F: include/linux/mfd/gsc.h
> +
> GASKET DRIVER FRAMEWORK
> M: Rob Springer <rspringer@google.com>
> M: Todd Poynor <toddpoynor@google.com>
> diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
> index 0a59249..d7546cd 100644
> --- a/drivers/mfd/Kconfig
> +++ b/drivers/mfd/Kconfig
> @@ -407,6 +407,22 @@ config MFD_EXYNOS_LPASS
> Select this option to enable support for Samsung Exynos Low Power
> Audio Subsystem.
>
> +config MFD_GATEWORKS_GSC
> + tristate "Gateworks System Controller"
> + depends on (I2C && OF)
> + select MFD_CORE
> + select REGMAP_I2C
> + select REGMAP_IRQ
> + help
> + Enable support for the Gateworks System Controller (GSC) found
> + on Gateworks Single Board Computers supporting system system

"system"

> + functions such as pushbutton monitor, multiple ADC's for voltage

"push-button"

> + and temperature, fan controller, and watchdog monitor. This

"voltage and temperature" what?

Monitoring, adjusting, guessing, mixing, matching?

I'd drop the pre-and comma myself.

> + driver provides common support for accessing the device and

Turn the "and" into a full-stop.

> + additional drivers must be enabled in order to use the
> + functionality of the device:
> + gsc-hwmon for ADC readings and fan controller support

What does this line represent? Is it an example?

> config MFD_MC13XXX
> tristate
> depends on (SPI_MASTER || I2C)
> diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
> index f935d10..ed433ae 100644
> --- a/drivers/mfd/Makefile
> +++ b/drivers/mfd/Makefile
> @@ -15,6 +15,7 @@ obj-$(CONFIG_MFD_BCM590XX) += bcm590xx.o
> obj-$(CONFIG_MFD_BD9571MWV) += bd9571mwv.o
> obj-$(CONFIG_MFD_CROS_EC_DEV) += cros_ec_dev.o
> obj-$(CONFIG_MFD_EXYNOS_LPASS) += exynos-lpass.o
> +obj-$(CONFIG_MFD_GATEWORKS_GSC) += gateworks-gsc.o
>
> obj-$(CONFIG_HTC_PASIC3) += htc-pasic3.o
> obj-$(CONFIG_HTC_I2CPLD) += htc-i2cpld.o
> diff --git a/drivers/mfd/gateworks-gsc.c b/drivers/mfd/gateworks-gsc.c
> new file mode 100644
> index 00000000..796effb
> --- /dev/null
> +++ b/drivers/mfd/gateworks-gsc.c
> @@ -0,0 +1,284 @@
> +// SPDX-License-Identifier: GPL-2.0
> +/*
> + * The Gateworks System Controller (GSC) is a multi-function
> + * device designed for use in Gateworks Single Board Computers.
> + * The control interface is I2C, with an interrupt. The device supports
> + * system functions such as pushbutton monitoring, multiple ADC's for
> + * voltage and temperature, fan controller, and watchdog monitor.

As above.

> + * Copyright (C) 2020 Gateworks Corporation
> + */
> +
> +#include <linux/device.h>
> +#include <linux/i2c.h>
> +#include <linux/interrupt.h>
> +#include <linux/mfd/gsc.h>
> +#include <linux/module.h>
> +#include <linux/mutex.h>
> +#include <linux/of.h>
> +#include <linux/of_platform.h>
> +#include <linux/platform_device.h>
> +#include <linux/regmap.h>
> +
> +#include <asm/unaligned.h>

[...]

> +static const struct i2c_device_id gsc_id_table[] = {
> + { "gsc", GSC_MISC },
> + { }
> +};
> +MODULE_DEVICE_TABLE(i2c, gsc_id_table);

Using probe_new means you can omit this unused table.

Once all of the above has been fixed, please add my:

For my own reference (apply this as-is to your sign-off block):

Acked-for-MFD-by: Lee Jones <lee.jones@linaro.org>

--
Lee Jones [李琼斯]
Linaro Services Technical Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog