Re: [PATCH v8 3/7] mfd: Add base driver for Netronix embedded controller

2021-01-17 Thread Jonathan Neuschäfer
On Sun, Jan 17, 2021 at 09:22:01AM +0800, kernel test robot wrote:
[...]
> >> drivers/mfd/ntxec.c:127:10: warning: variable 'res' is uninitialized when 
> >> used here [-Wuninitialized]
>return res;
>   ^~~
>drivers/mfd/ntxec.c:116:9: note: initialize the variable 'res' to silence 
> this warning
>int res;
>   ^
>= 0
>1 warning generated.
[...]
>124ec->regmap = devm_regmap_init_i2c(client, 
> _config);
>125if (IS_ERR(ec->regmap)) {
>126dev_err(ec->dev, "Failed to set up regmap for 
> device\n");
>  > 127return res;
>128}

Ah well, that's a bug (present since v2 of the patchset). The return
statement should be:

return PTR_ERR(ec->regmap);


Thanks,
Jonathan Neuschäfer


signature.asc
Description: PGP signature


Re: [PATCH v8 3/7] mfd: Add base driver for Netronix embedded controller

2021-01-16 Thread kernel test robot
Hi "Jonathan,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on lee-mfd/for-mfd-next]
[also build test WARNING on robh/for-next pwm/for-next abelloni/rtc-next 
linus/master v5.11-rc3 next-20210115]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:
https://github.com/0day-ci/linux/commits/Jonathan-Neusch-fer/Netronix-embedded-controller-driver-for-Kobo-and-Tolino-ebook-readers/20210117-050203
base:   https://git.kernel.org/pub/scm/linux/kernel/git/lee/mfd.git for-mfd-next
config: mips-randconfig-r001-20210117 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project 
2082b10d100e8dbaffc2ba8f497db5d2ab61beb2)
reproduce (this is a W=1 build):
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# install mips cross compiling tool for clang build
# apt-get install binutils-mips-linux-gnu
# 
https://github.com/0day-ci/linux/commit/eee80e6b3b7cc2c733bd3f10d8e2ec23dda2fe26
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review 
Jonathan-Neusch-fer/Netronix-embedded-controller-driver-for-Kobo-and-Tolino-ebook-readers/20210117-050203
git checkout eee80e6b3b7cc2c733bd3f10d8e2ec23dda2fe26
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot 

All warnings (new ones prefixed by >>):

>> drivers/mfd/ntxec.c:127:10: warning: variable 'res' is uninitialized when 
>> used here [-Wuninitialized]
   return res;
  ^~~
   drivers/mfd/ntxec.c:116:9: note: initialize the variable 'res' to silence 
this warning
   int res;
  ^
   = 0
   1 warning generated.


vim +/res +127 drivers/mfd/ntxec.c

   111  
   112  static int ntxec_probe(struct i2c_client *client)
   113  {
   114  struct ntxec *ec;
   115  unsigned int version;
   116  int res;
   117  
   118  ec = devm_kmalloc(>dev, sizeof(*ec), GFP_KERNEL);
   119  if (!ec)
   120  return -ENOMEM;
   121  
   122  ec->dev = >dev;
   123  
   124  ec->regmap = devm_regmap_init_i2c(client, _config);
   125  if (IS_ERR(ec->regmap)) {
   126  dev_err(ec->dev, "Failed to set up regmap for 
device\n");
 > 127  return res;
   128  }
   129  
   130  /* Determine the firmware version */
   131  res = regmap_read(ec->regmap, NTXEC_REG_VERSION, );
   132  if (res < 0) {
   133  dev_err(ec->dev, "Failed to read firmware version 
number\n");
   134  return res;
   135  }
   136  
   137  /* Bail out if we encounter an unknown firmware version */
   138  switch (version) {
   139  case NTXEC_VERSION_KOBO_AURA:
   140  break;
   141  default:
   142  dev_err(ec->dev,
   143  "Netronix embedded controller version %04x is 
not supported.\n",
   144  version);
   145  return -ENODEV;
   146  }
   147  
   148  dev_info(ec->dev,
   149   "Netronix embedded controller version %04x 
detected.\n", version);
   150  
   151  if (of_device_is_system_power_controller(ec->dev->of_node)) {
   152  /*
   153   * Set the 'powerkeep' bit. This is necessary on some 
boards
   154   * in order to keep the system running.
   155   */
   156  res = regmap_write(ec->regmap, NTXEC_REG_POWERKEEP,
   157 NTXEC_POWERKEEP_VALUE);
   158  if (res < 0)
   159  return res;
   160  
   161  if (poweroff_restart_client)
   162  /*
   163   * Another instance of the driver already took
   164   * poweroff/restart duties.
   165   */
   166  dev_err(ec->dev, "poweroff_restart_client 
already assigned\n");
   167  else
   168  poweroff_restart_client = client;
   169  
   170  if (pm_power_off)
   171  /* Another driver already registered a poweroff 
handler. */
   172  dev_err(ec->dev, "pm_power_off already 
assigned\n");
   173  else
   174  pm_power_off = ntxec_poweroff;
   175  
   176  res = 

[PATCH v8 3/7] mfd: Add base driver for Netronix embedded controller

2021-01-16 Thread Jonathan Neuschäfer
The Netronix embedded controller is a microcontroller found in some
e-book readers designed by the original design manufacturer Netronix,
Inc. It contains RTC, battery monitoring, system power management, and
PWM functionality.

This driver implements register access and version detection.

Third-party hardware documentation is available at:

  https://github.com/neuschaefer/linux/wiki/Netronix-MSP430-embedded-controller

The EC supports interrupts, but the driver doesn't make use of them so
far.

Signed-off-by: Jonathan Neuschäfer 
Acked-for-MFD-by: Lee Jones 
---
v8:
- Add missing MODULE_DEVICE_TABLE
- Add module metadata (author, description, license)

v7:
- Add #define for version number (suggested by Lee Jones).

v6:
- https://lore.kernel.org/lkml/20201208011000.3060239-4-j.neuschae...@gmx.net/
- Add Lee Jones' ACK

v5:
- no changes

v4:
- https://lore.kernel.org/lkml/2020112739.1455132-4-j.neuschae...@gmx.net/
- include asm/unaligned.h after linux/*
- Use put_unaligned_be16 instead of open-coded big-endian packing
- Clarify that 0x90=0xff00 causes an error in downstream kernel too
- Add commas after non-sentinel positions
- ntxec.h: declare structs device and regmap
- Replace WARN_ON usage and add comments to explain errors
- Replace dev_alert with dev_warn when the result isn't handled
- Change subdevice registration error message to dev_err
- Declare ntxec_reg8 as returning __be16
- Restructure version detection code
- Spell out ODM

v3:
- https://lore.kernel.org/lkml/20200924192455.2484005-4-j.neuschae...@gmx.net/
- Add (EC) to CONFIG_MFD_NTXEC prompt
- Relicense as GPLv2 or later
- Add email address to copyright line
- remove empty lines in ntxec_poweroff and ntxec_restart functions
- Split long lines
- Remove 'Install ... handler' comments
- Make naming of struct i2c_client parameter consistent
- Remove struct ntxec_info
- Rework 'depends on' lines in Kconfig, hard-depend on I2C, select REGMAP_I2C 
and
  MFD_CORE
- Register subdevices via mfd_cells
- Move 8-bit register conversion to ntxec.h

v2:
- https://lore.kernel.org/lkml/20200905133230.1014581-4-j.neuschae...@gmx.net/
- Add a description of the device to the patch text
- Unify spelling as 'Netronix embedded controller'.
  'Netronix' is the proper name of the manufacturer, but 'embedded controller'
  is just a label that I have assigned to the device.
- Switch to regmap, avoid regmap use in poweroff and reboot handlers.
  Inspired by cf84dc0bb40f4 ("mfd: rn5t618: Make restart handler atomic safe")
- Use a list of known-working firmware versions instead of checking for a
  known-incompatible version
- Prefix registers with NTXEC_REG_
- Define register values as constants
- Various style cleanups as suggested by Lee Jones
- Don't align = signs in struct initializers [Uwe Kleine-König]
- Don't use dev_dbg for an error message
- Explain sleep in poweroff handler
- Remove (struct ntxec).client
- Switch to .probe_new in i2c driver
- Add .remove callback
- Make CONFIG_MFD_NTXEC a tristate option
---
 drivers/mfd/Kconfig   |  11 ++
 drivers/mfd/Makefile  |   1 +
 drivers/mfd/ntxec.c   | 221 ++
 include/linux/mfd/ntxec.h |  37 +++
 4 files changed, 270 insertions(+)
 create mode 100644 drivers/mfd/ntxec.c
 create mode 100644 include/linux/mfd/ntxec.h

diff --git a/drivers/mfd/Kconfig b/drivers/mfd/Kconfig
index bdfce7b156216..4280bcd47ec7d 100644
--- a/drivers/mfd/Kconfig
+++ b/drivers/mfd/Kconfig
@@ -976,6 +976,17 @@ config MFD_VIPERBOARD
  You need to select the mfd cell drivers separately.
  The drivers do not support all features the board exposes.

+config MFD_NTXEC
+   tristate "Netronix embedded controller (EC)"
+   depends on OF || COMPILE_TEST
+   depends on I2C
+   select REGMAP_I2C
+   select MFD_CORE
+   help
+ Say yes here if you want to support the embedded controller found in
+ certain e-book readers designed by the original design manufacturer
+ Netronix.
+
 config MFD_RETU
tristate "Nokia Retu and Tahvo multi-function device"
select MFD_CORE
diff --git a/drivers/mfd/Makefile b/drivers/mfd/Makefile
index 14fdb188af022..948a3bf8e3e57 100644
--- a/drivers/mfd/Makefile
+++ b/drivers/mfd/Makefile
@@ -219,6 +219,7 @@ obj-$(CONFIG_MFD_INTEL_PMC_BXT) += intel_pmc_bxt.o
 obj-$(CONFIG_MFD_INTEL_PMT)+= intel_pmt.o
 obj-$(CONFIG_MFD_PALMAS)   += palmas.o
 obj-$(CONFIG_MFD_VIPERBOARD)+= viperboard.o
+obj-$(CONFIG_MFD_NTXEC)+= ntxec.o
 obj-$(CONFIG_MFD_RC5T583)  += rc5t583.o rc5t583-irq.o
 obj-$(CONFIG_MFD_RK808)+= rk808.o
 obj-$(CONFIG_MFD_RN5T618)  += rn5t618.o
diff --git a/drivers/mfd/ntxec.c b/drivers/mfd/ntxec.c
new file mode 100644
index 0..9c435bcd9d88a
--- /dev/null
+++ b/drivers/mfd/ntxec.c
@@ -0,0 +1,221 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * The Netronix embedded controller is a microcontroller found in some
+ *