Re: [PATCH v8 3/7] mfd: Add base driver for Netronix embedded controller
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
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
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 + *