Re: [PATCH] Squashfs: fix xattr id and id lookup sanity checks

2021-03-09 Thread Sean Nyekjaer

Hi Andrew

This patch depends on my patch ([PATCH] squashfs: fix inode lookup sanity 
checks)
which add's the SQUASHFS_BLOCK_OFFSET :)

/Sean



[PATCH] iio: accel: mma8452: convert to regmap

2021-03-03 Thread Sean Nyekjaer
It will be easier to configure various device registers.

No functional change.

Signed-off-by: Sean Nyekjaer 
---
 drivers/iio/accel/mma8452.c | 291 +++-
 1 file changed, 156 insertions(+), 135 deletions(-)

diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index 33f0c419d8ff..fc29a6e16428 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -32,6 +32,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define MMA8452_STATUS 0x00
 #define  MMA8452_STATUS_DRDY   (BIT(2) | BIT(1) | BIT(0))
@@ -102,7 +103,8 @@
 #define MMA8452_AUTO_SUSPEND_DELAY_MS  2000
 
 struct mma8452_data {
-   struct i2c_client *client;
+   struct regmap *regmap;
+   struct device *dev;
struct mutex lock;
u8 ctrl_reg1;
u8 data_cfg;
@@ -163,6 +165,11 @@ static const struct mma8452_event_regs trans_ev_regs = {
.ev_count = MMA8452_TRANSIENT_COUNT,
 };
 
+static const struct regmap_config mma8452_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+};
+
 /**
  * struct mma_chip_info - chip specific data
  * @chip_id:   WHO_AM_I register's value
@@ -194,13 +201,14 @@ enum {
 static int mma8452_drdy(struct mma8452_data *data)
 {
int tries = 150;
+   unsigned int reg;
 
while (tries-- > 0) {
-   int ret = i2c_smbus_read_byte_data(data->client,
-   MMA8452_STATUS);
+   int ret = regmap_read(data->regmap, MMA8452_STATUS, );
if (ret < 0)
return ret;
-   if ((ret & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
+
+   if ((reg & MMA8452_STATUS_DRDY) == MMA8452_STATUS_DRDY)
return 0;
 
if (data->sleep_val <= 20)
@@ -210,28 +218,28 @@ static int mma8452_drdy(struct mma8452_data *data)
msleep(20);
}
 
-   dev_err(>client->dev, "data not ready\n");
+   dev_err(data->dev, "data not ready\n");
 
return -EIO;
 }
 
-static int mma8452_set_runtime_pm_state(struct i2c_client *client, bool on)
+static int mma8452_set_runtime_pm_state(struct device *dev, bool on)
 {
 #ifdef CONFIG_PM
int ret;
 
if (on) {
-   ret = pm_runtime_get_sync(>dev);
+   ret = pm_runtime_get_sync(dev);
} else {
-   pm_runtime_mark_last_busy(>dev);
-   ret = pm_runtime_put_autosuspend(>dev);
+   pm_runtime_mark_last_busy(dev);
+   ret = pm_runtime_put_autosuspend(dev);
}
 
if (ret < 0) {
-   dev_err(>dev,
+   dev_err(dev,
"failed to change power state to %d\n", on);
if (on)
-   pm_runtime_put_noidle(>dev);
+   pm_runtime_put_noidle(dev);
 
return ret;
}
@@ -247,14 +255,17 @@ static int mma8452_read(struct mma8452_data *data, __be16 
buf[3])
if (ret < 0)
return ret;
 
-   ret = mma8452_set_runtime_pm_state(data->client, true);
+   ret = mma8452_set_runtime_pm_state(data->dev, true);
if (ret)
return ret;
 
-   ret = i2c_smbus_read_i2c_block_data(data->client, MMA8452_OUT_X,
-   3 * sizeof(__be16), (u8 *)buf);
+   ret = regmap_bulk_read(data->regmap, MMA8452_OUT_X, (u8 *)buf, 3 * 
sizeof(__be16));
+   if (ret < 0) {
+   dev_err(data->dev, "failed to read axes\n");
+   return ret;
+   }
 
-   ret = mma8452_set_runtime_pm_state(data->client, false);
+   ret = mma8452_set_runtime_pm_state(data->dev, false);
 
return ret;
 }
@@ -358,12 +369,12 @@ static const u16 mma8452_os_ratio[4][8] = {
 
 static int mma8452_get_power_mode(struct mma8452_data *data)
 {
-   int reg;
+   int ret;
+   unsigned int reg;
 
-   reg = i2c_smbus_read_byte_data(data->client,
-  MMA8452_CTRL_REG2);
-   if (reg < 0)
-   return reg;
+   ret = regmap_read(data->regmap, MMA8452_CTRL_REG2, );
+   if (ret < 0)
+   return ret;
 
return ((reg & MMA8452_CTRL_REG2_MODS_MASK) >>
MMA8452_CTRL_REG2_MODS_SHIFT);
@@ -468,8 +479,9 @@ static int mma8452_get_hp_filter_index(struct mma8452_data 
*data,
 static int mma8452_read_hp_filter(struct mma8452_data *data, int *hz, int *uHz)
 {
int j, i, ret;
+   unsigned int reg;
 
-   ret = i2c_smbus_read_byte_data(data->client, MMA8452_HP_FILTER_CUTOFF);
+   ret = regmap_read(data->regmap, MMA8452_HP_FILTER_CUTOFF, );
if (ret < 0)
return ret;
 
@@ -479,8 +491,8 @@ static int mma8452_

[PATCH v2] iio: accel: mma8452: fix indentation

2021-03-01 Thread Sean Nyekjaer
Improve readability by fixing indentation.

Signed-off-by: Sean Nyekjaer 
---
v2: removed fixing of register values indentation

 drivers/iio/accel/mma8452.c | 46 ++---
 1 file changed, 23 insertions(+), 23 deletions(-)

diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index b0176d936423..33f0c419d8ff 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -58,7 +58,7 @@
 #define MMA8452_FF_MT_THS  0x17
 #define  MMA8452_FF_MT_THS_MASK0x7f
 #define MMA8452_FF_MT_COUNT0x18
-#define MMA8452_FF_MT_CHAN_SHIFT   3
+#define MMA8452_FF_MT_CHAN_SHIFT   3
 #define MMA8452_TRANSIENT_CFG  0x1d
 #define  MMA8452_TRANSIENT_CFG_CHAN(chan)  BIT(chan + 1)
 #define  MMA8452_TRANSIENT_CFG_HPF_BYP BIT(0)
@@ -70,7 +70,7 @@
 #define MMA8452_TRANSIENT_THS  0x1f
 #define  MMA8452_TRANSIENT_THS_MASKGENMASK(6, 0)
 #define MMA8452_TRANSIENT_COUNT0x20
-#define MMA8452_TRANSIENT_CHAN_SHIFT 1
+#define MMA8452_TRANSIENT_CHAN_SHIFT   1
 #define MMA8452_CTRL_REG1  0x2a
 #define  MMA8452_CTRL_ACTIVE   BIT(0)
 #define  MMA8452_CTRL_DR_MASK  GENMASK(5, 3)
@@ -134,33 +134,33 @@ struct mma8452_data {
   * used for different chips and the relevant registers are included here.
   */
 struct mma8452_event_regs {
-   u8 ev_cfg;
-   u8 ev_cfg_ele;
-   u8 ev_cfg_chan_shift;
-   u8 ev_src;
-   u8 ev_ths;
-   u8 ev_ths_mask;
-   u8 ev_count;
+   u8 ev_cfg;
+   u8 ev_cfg_ele;
+   u8 ev_cfg_chan_shift;
+   u8 ev_src;
+   u8 ev_ths;
+   u8 ev_ths_mask;
+   u8 ev_count;
 };
 
 static const struct mma8452_event_regs ff_mt_ev_regs = {
-   .ev_cfg = MMA8452_FF_MT_CFG,
-   .ev_cfg_ele = MMA8452_FF_MT_CFG_ELE,
-   .ev_cfg_chan_shift = MMA8452_FF_MT_CHAN_SHIFT,
-   .ev_src = MMA8452_FF_MT_SRC,
-   .ev_ths = MMA8452_FF_MT_THS,
-   .ev_ths_mask = MMA8452_FF_MT_THS_MASK,
-   .ev_count = MMA8452_FF_MT_COUNT
+   .ev_cfg = MMA8452_FF_MT_CFG,
+   .ev_cfg_ele = MMA8452_FF_MT_CFG_ELE,
+   .ev_cfg_chan_shift = MMA8452_FF_MT_CHAN_SHIFT,
+   .ev_src = MMA8452_FF_MT_SRC,
+   .ev_ths = MMA8452_FF_MT_THS,
+   .ev_ths_mask = MMA8452_FF_MT_THS_MASK,
+   .ev_count = MMA8452_FF_MT_COUNT
 };
 
 static const struct mma8452_event_regs trans_ev_regs = {
-   .ev_cfg = MMA8452_TRANSIENT_CFG,
-   .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
-   .ev_cfg_chan_shift = MMA8452_TRANSIENT_CHAN_SHIFT,
-   .ev_src = MMA8452_TRANSIENT_SRC,
-   .ev_ths = MMA8452_TRANSIENT_THS,
-   .ev_ths_mask = MMA8452_TRANSIENT_THS_MASK,
-   .ev_count = MMA8452_TRANSIENT_COUNT,
+   .ev_cfg = MMA8452_TRANSIENT_CFG,
+   .ev_cfg_ele = MMA8452_TRANSIENT_CFG_ELE,
+   .ev_cfg_chan_shift = MMA8452_TRANSIENT_CHAN_SHIFT,
+   .ev_src = MMA8452_TRANSIENT_SRC,
+   .ev_ths = MMA8452_TRANSIENT_THS,
+   .ev_ths_mask = MMA8452_TRANSIENT_THS_MASK,
+   .ev_count = MMA8452_TRANSIENT_COUNT,
 };
 
 /**
-- 
2.29.2



[PATCH] iio: accel: mma8452: fix indentation

2021-02-26 Thread Sean Nyekjaer
Improve readability by using empty linies instead of extra spaces.

Signed-off-by: Sean Nyekjaer 
---
 drivers/iio/accel/mma8452.c | 120 
 1 file changed, 67 insertions(+), 53 deletions(-)

diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c
index b0176d936423..9fc1f7550b9c 100644
--- a/drivers/iio/accel/mma8452.c
+++ b/drivers/iio/accel/mma8452.c
@@ -34,52 +34,66 @@
 #include 
 
 #define MMA8452_STATUS 0x00
-#define  MMA8452_STATUS_DRDY   (BIT(2) | BIT(1) | BIT(0))
+#define MMA8452_STATUS_DRDY(BIT(2) | BIT(1) | BIT(0))
+
 #define MMA8452_OUT_X  0x01 /* MSB first */
 #define MMA8452_OUT_Y  0x03
 #define MMA8452_OUT_Z  0x05
 #define MMA8452_INT_SRC0x0c
 #define MMA8452_WHO_AM_I   0x0d
+
 #define MMA8452_DATA_CFG   0x0e
-#define  MMA8452_DATA_CFG_FS_MASK  GENMASK(1, 0)
-#define  MMA8452_DATA_CFG_FS_2G0
-#define  MMA8452_DATA_CFG_FS_4G1
-#define  MMA8452_DATA_CFG_FS_8G2
-#define  MMA8452_DATA_CFG_HPF_MASK BIT(4)
+#define MMA8452_DATA_CFG_FS_MASK   GENMASK(1, 0)
+#define MMA8452_DATA_CFG_FS_2G 0
+#define MMA8452_DATA_CFG_FS_4G 1
+#define MMA8452_DATA_CFG_FS_8G 2
+#define MMA8452_DATA_CFG_HPF_MASK  BIT(4)
+
 #define MMA8452_HP_FILTER_CUTOFF   0x0f
-#define  MMA8452_HP_FILTER_CUTOFF_SEL_MASK GENMASK(1, 0)
+#define MMA8452_HP_FILTER_CUTOFF_SEL_MASK  GENMASK(1, 0)
+
 #define MMA8452_FF_MT_CFG  0x15
-#define  MMA8452_FF_MT_CFG_OAE BIT(6)
-#define  MMA8452_FF_MT_CFG_ELE BIT(7)
+#define MMA8452_FF_MT_CFG_OAE  BIT(6)
+#define MMA8452_FF_MT_CFG_ELE  BIT(7)
+
 #define MMA8452_FF_MT_SRC  0x16
-#define  MMA8452_FF_MT_SRC_XHE BIT(1)
-#define  MMA8452_FF_MT_SRC_YHE BIT(3)
-#define  MMA8452_FF_MT_SRC_ZHE BIT(5)
+#define MMA8452_FF_MT_SRC_XHE  BIT(1)
+#define MMA8452_FF_MT_SRC_YHE  BIT(3)
+#define MMA8452_FF_MT_SRC_ZHE  BIT(5)
+
 #define MMA8452_FF_MT_THS  0x17
-#define  MMA8452_FF_MT_THS_MASK0x7f
+#define MMA8452_FF_MT_THS_MASK 0x7f
+
 #define MMA8452_FF_MT_COUNT0x18
-#define MMA8452_FF_MT_CHAN_SHIFT   3
+#define MMA8452_FF_MT_CHAN_SHIFT   3
+
 #define MMA8452_TRANSIENT_CFG  0x1d
-#define  MMA8452_TRANSIENT_CFG_CHAN(chan)  BIT(chan + 1)
-#define  MMA8452_TRANSIENT_CFG_HPF_BYP BIT(0)
-#define  MMA8452_TRANSIENT_CFG_ELE BIT(4)
+#define MMA8452_TRANSIENT_CFG_CHAN(chan)   BIT(chan + 1)
+#define MMA8452_TRANSIENT_CFG_HPF_BYP  BIT(0)
+#define MMA8452_TRANSIENT_CFG_ELE  BIT(4)
+
 #define MMA8452_TRANSIENT_SRC  0x1e
-#define  MMA8452_TRANSIENT_SRC_XTRANSE BIT(1)
-#define  MMA8452_TRANSIENT_SRC_YTRANSE BIT(3)
-#define  MMA8452_TRANSIENT_SRC_ZTRANSE BIT(5)
+#define MMA8452_TRANSIENT_SRC_XTRANSE  BIT(1)
+#define MMA8452_TRANSIENT_SRC_YTRANSE  BIT(3)
+#define MMA8452_TRANSIENT_SRC_ZTRANSE  BIT(5)
+
 #define MMA8452_TRANSIENT_THS  0x1f
-#define  MMA8452_TRANSIENT_THS_MASKGENMASK(6, 0)
+#define MMA8452_TRANSIENT_THS_MASK GENMASK(6, 0)
+
 #define MMA8452_TRANSIENT_COUNT0x20
-#define MMA8452_TRANSIENT_CHAN_SHIFT 1
+#define MMA8452_TRANSIENT_CHAN_SHIFT   1
+
 #define MMA8452_CTRL_REG1  0x2a
-#define  MMA8452_CTRL_ACTIVE   BIT(0)
-#define  MMA8452_CTRL_DR_MASK  GENMASK(5, 3)
-#define  MMA8452_CTRL_DR_SHIFT 3
-#define  MMA8452_CTRL_DR_DEFAULT   0x4 /* 50 Hz sample frequency */
+#define MMA8452_CTRL_ACTIVEBIT(0)
+#define MMA8452_CTRL_DR_MASK   GENMASK(5, 3)
+#define MMA8452_CTRL_DR_SHIFT  3
+#define MMA8452_CTRL_DR_DEFAULT0x4 /* 50 Hz sample 
frequency */
+
 #define MMA8452_CTRL_REG2  0x2b
-#define  MMA8452_CTRL_REG2_RST BIT(6)
-#define  MMA8452_CTRL_REG2_MODS_SHIFT  3
-#define  MMA8452_CTRL_REG2_MODS_MASK   0x1b
+#define MMA8452_CTRL_REG2_RST  BIT(6)
+#define MMA8452_CTRL_REG2_MODS_SHIFT   3
+#define MMA8452_CTRL_REG2_MODS_MASK0x1b
+
 #define MMA8452_CTRL_REG4  0x2d
 #define MMA8452_CTRL_REG5  0x2e
 #define MMA8452_OFF_X  0x2f
@@ -88,9 +102,9 @@
 
 #define MMA8452_MAX_REG0x31

[PATCH] squashfs: fix inode lookup sanity checks

2021-02-26 Thread Sean Nyekjaer
When mouting a squashfs image created without inode compression it
fails with: "unable to read inode lookup table"

It turns out that the BLOCK_OFFSET is missing when checking
the SQUASHFS_METADATA_SIZE agaist the actual size.

Fixes: eabac19e40c0 ("squashfs: add more sanity checks in inode lookup")
CC: sta...@vger.kernel.org
Signed-off-by: Sean Nyekjaer 
---
 fs/squashfs/export.c  | 8 ++--
 fs/squashfs/squashfs_fs.h | 1 +
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/fs/squashfs/export.c b/fs/squashfs/export.c
index eb02072d28dd..723763746238 100644
--- a/fs/squashfs/export.c
+++ b/fs/squashfs/export.c
@@ -152,14 +152,18 @@ __le64 *squashfs_read_inode_lookup_table(struct 
super_block *sb,
start = le64_to_cpu(table[n]);
end = le64_to_cpu(table[n + 1]);
 
-   if (start >= end || (end - start) > SQUASHFS_METADATA_SIZE) {
+   if (start >= end
+   || (end - start) >
+   (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
kfree(table);
return ERR_PTR(-EINVAL);
}
}
 
start = le64_to_cpu(table[indexes - 1]);
-   if (start >= lookup_table_start || (lookup_table_start - start) > 
SQUASHFS_METADATA_SIZE) {
+   if (start >= lookup_table_start ||
+   (lookup_table_start - start) >
+   (SQUASHFS_METADATA_SIZE + SQUASHFS_BLOCK_OFFSET)) {
kfree(table);
return ERR_PTR(-EINVAL);
}
diff --git a/fs/squashfs/squashfs_fs.h b/fs/squashfs/squashfs_fs.h
index 8d64edb80ebf..b3fdc8212c5f 100644
--- a/fs/squashfs/squashfs_fs.h
+++ b/fs/squashfs/squashfs_fs.h
@@ -17,6 +17,7 @@
 
 /* size of metadata (inode and directory) blocks */
 #define SQUASHFS_METADATA_SIZE 8192
+#define SQUASHFS_BLOCK_OFFSET  2
 
 /* default size of block device I/O */
 #ifdef CONFIG_SQUASHFS_4K_DEVBLK_SIZE
-- 
2.29.2



Re: [PATCH] mtd: rawnand: gpmi: fix dst bit offset when extracting raw payload

2021-01-18 Thread Sean Nyekjaer




On 04/01/2021 12.15, Miquel Raynal wrote:

Hi Sean,

Sean Nyekjaer  wrote on Mon, 4 Jan 2021 11:50:10 +0100:


On 04/01/2021 11.35, Miquel Raynal wrote:

On Mon, 2020-12-21 at 10:00:13 UTC, Sean Nyekjaer wrote:

Re-add the multiply by 8 to "step * eccsize" to correct the destination bit 
offset
when extracting the data payload in gpmi_ecc_read_page_raw().

Fixes: e5e5631cc889 ("mtd: rawnand: gpmi: Use nand_extract_bits()")
Cc: sta...@vger.kernel.org
Reported-by: Martin Hundebøll 
Signed-off-by: Sean Nyekjaer 

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git 
nand/next, thanks.

Miquel

Hi Miquel

Will you please queue this for fixes? It's quite relevant for 5.10 LTS :)

Right, that will be quicker to have it in Linus' tree. I moved
the patch to the mtd/next branch.


Hi Miquel,

Any guess to when the mtd/fixes branch will be pulled into Linus' tree?

/Sean


Re: [PATCH] mtd: rawnand: gpmi: fix dst bit offset when extracting raw payload

2021-01-04 Thread Sean Nyekjaer




On 04/01/2021 11.35, Miquel Raynal wrote:

On Mon, 2020-12-21 at 10:00:13 UTC, Sean Nyekjaer wrote:

Re-add the multiply by 8 to "step * eccsize" to correct the destination bit 
offset
when extracting the data payload in gpmi_ecc_read_page_raw().

Fixes: e5e5631cc889 ("mtd: rawnand: gpmi: Use nand_extract_bits()")
Cc: sta...@vger.kernel.org
Reported-by: Martin Hundebøll 
Signed-off-by: Sean Nyekjaer 

Applied to https://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git 
nand/next, thanks.

Miquel

Hi Miquel

Will you please queue this for fixes? It's quite relevant for 5.10 LTS :)

Best regards
Sean Nyekjaer


[PATCH] mtd: rawnand: gpmi: fix dst bit offset when extracting raw payload

2020-12-21 Thread Sean Nyekjaer
Re-add the multiply by 8 to "step * eccsize" to correct the destination bit 
offset
when extracting the data payload in gpmi_ecc_read_page_raw().

Fixes: e5e5631cc889 ("mtd: rawnand: gpmi: Use nand_extract_bits()")
Cc: sta...@vger.kernel.org
Reported-by: Martin Hundebøll 
Signed-off-by: Sean Nyekjaer 
---
 drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c 
b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
index dc8104e67506..f0726e69a312 100644
--- a/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
+++ b/drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c
@@ -1611,7 +1611,7 @@ static int gpmi_ecc_read_page_raw(struct nand_chip *chip, 
uint8_t *buf,
/* Extract interleaved payload data and ECC bits */
for (step = 0; step < nfc_geo->ecc_chunk_count; step++) {
if (buf)
-   nand_extract_bits(buf, step * eccsize, tmp_buf,
+   nand_extract_bits(buf, step * eccsize * 8, tmp_buf,
  src_bit_off, eccsize * 8);
src_bit_off += eccsize * 8;
 
-- 
2.29.2



[PATCH v2] regulator: pfuze100: limit pfuze-support-disable-sw to pfuze{100,200}

2020-11-10 Thread Sean Nyekjaer
Limit the fsl,pfuze-support-disable-sw to the pfuze100 and pfuze200
variants.
When enabling fsl,pfuze-support-disable-sw and using a pfuze3000 or
pfuze3001, the driver would choose pfuze100_sw_disable_regulator_ops
instead of the newly introduced and correct pfuze3000_sw_regulator_ops.

Signed-off-by: Sean Nyekjaer 
Fixes: 6f1cf5257acc ("regualtor: pfuze100: correct sw1a/sw2 on pfuze3000")
Cc: sta...@vger.kernel.org
---
Changes since v1:
 - Added signoff
 - fixed typo in commit msg

 drivers/regulator/pfuze100-regulator.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/regulator/pfuze100-regulator.c 
b/drivers/regulator/pfuze100-regulator.c
index 7e8ba9246167..01a12cfcea7c 100644
--- a/drivers/regulator/pfuze100-regulator.c
+++ b/drivers/regulator/pfuze100-regulator.c
@@ -836,11 +836,14 @@ static int pfuze100_regulator_probe(struct i2c_client 
*client,
 * the switched regulator till yet.
 */
if (pfuze_chip->flags & PFUZE_FLAG_DISABLE_SW) {
-   if (pfuze_chip->regulator_descs[i].sw_reg) {
-   desc->ops = _sw_disable_regulator_ops;
-   desc->enable_val = 0x8;
-   desc->disable_val = 0x0;
-   desc->enable_time = 500;
+   if (pfuze_chip->chip_id == PFUZE100 ||
+   pfuze_chip->chip_id == PFUZE200) {
+   if (pfuze_chip->regulator_descs[i].sw_reg) {
+   desc->ops = 
_sw_disable_regulator_ops;
+   desc->enable_val = 0x8;
+   desc->disable_val = 0x0;
+   desc->enable_time = 500;
+   }
}
}
 
-- 
2.28.0



[PATCH] regualtor: pfuze100: limit pfuze-support-disable-sw to pfuze{100,200}

2020-11-05 Thread Sean Nyekjaer
Limit the fsl,pfuze-support-disable-sw to the pfuze100 and pfuze200
variants.
When enabling fsl,pfuze-support-disable-sw and using a pfuze3000 or
pfuze3001, the driver would choose pfuze100_sw_disable_regulator_ops
instead of the newly introduced and correct pfuze3000_sw_regulator_ops.

Fixes: 6f1cf5257acc ("regualtor: pfuze100: correct sw1a/sw2 on pfuze3000")
Cc: sta...@vger.kernel.org
---
 drivers/regulator/pfuze100-regulator.c | 13 -
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/drivers/regulator/pfuze100-regulator.c 
b/drivers/regulator/pfuze100-regulator.c
index 7e8ba9246167..01a12cfcea7c 100644
--- a/drivers/regulator/pfuze100-regulator.c
+++ b/drivers/regulator/pfuze100-regulator.c
@@ -836,11 +836,14 @@ static int pfuze100_regulator_probe(struct i2c_client 
*client,
 * the switched regulator till yet.
 */
if (pfuze_chip->flags & PFUZE_FLAG_DISABLE_SW) {
-   if (pfuze_chip->regulator_descs[i].sw_reg) {
-   desc->ops = _sw_disable_regulator_ops;
-   desc->enable_val = 0x8;
-   desc->disable_val = 0x0;
-   desc->enable_time = 500;
+   if (pfuze_chip->chip_id == PFUZE100 ||
+   pfuze_chip->chip_id == PFUZE200) {
+   if (pfuze_chip->regulator_descs[i].sw_reg) {
+   desc->ops = 
_sw_disable_regulator_ops;
+   desc->enable_val = 0x8;
+   desc->disable_val = 0x0;
+   desc->enable_time = 500;
+   }
}
}
 
-- 
2.28.0



Re: IIO timestamp get skewed when suspending (st_lsm6dsx)

2020-06-08 Thread Sean Nyekjaer

Hi Thomas,

I have a question regarding CLOCK_REALTIME and CLOCK_BOOTTIME when 
resuming from suspend.


We have run into problems with 
drivers/iio/imu/st_lsm6dsx/st_lsm6dsx_core.c + the first patch from 
Lorenzo Bianconi in this thread.
The accelerometer have an internal FIFO that includes a timestamp. When 
we resume from suspend,
the driver resets the fifo ts counter and sets an internal reference to 
that time.
But to me it looks like both CLOCK_REALTIME and CLOCK_BOOTIME aren't 
ready when st_lsm6dsx_resume() is called.


If this is a limitation, can you point to other drivers that have been 
able to workaround it?

Or can we wait for a flag or similar?

Best regards,
Sean Nyekjaer



Re: [PATCH] can: Delete unnecessary checks before the macro call “dev_kfree_skb”

2019-08-22 Thread Sean Nyekjaer




On 21/08/2019 21.30, Markus Elfring wrote:

From: Markus Elfring 
Date: Wed, 21 Aug 2019 21:16:15 +0200

The dev_kfree_skb() function performs also input parameter validation.
Thus the test around the shown calls is not needed.

This issue was detected by using the Coccinelle software.

Signed-off-by: Markus Elfring 

Acked-by: Sean Nyekjaer 

---
  drivers/net/can/spi/hi311x.c  | 3 +--
  drivers/net/can/spi/mcp251x.c | 3 +--
  2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c
index 03a711c3221b..7c7c7e78214c 100644
--- a/drivers/net/can/spi/hi311x.c
+++ b/drivers/net/can/spi/hi311x.c
@@ -184,8 +184,7 @@ static void hi3110_clean(struct net_device *net)

if (priv->tx_skb || priv->tx_len)
net->stats.tx_errors++;
-   if (priv->tx_skb)
-   dev_kfree_skb(priv->tx_skb);
+   dev_kfree_skb(priv->tx_skb);
if (priv->tx_len)
can_free_echo_skb(priv->net, 0);
priv->tx_skb = NULL;
diff --git a/drivers/net/can/spi/mcp251x.c b/drivers/net/can/spi/mcp251x.c
index 12358f06d194..1c496d2adb45 100644
--- a/drivers/net/can/spi/mcp251x.c
+++ b/drivers/net/can/spi/mcp251x.c
@@ -274,8 +274,7 @@ static void mcp251x_clean(struct net_device *net)

if (priv->tx_skb || priv->tx_len)
net->stats.tx_errors++;
-   if (priv->tx_skb)
-   dev_kfree_skb(priv->tx_skb);
+   dev_kfree_skb(priv->tx_skb);
if (priv->tx_len)
can_free_echo_skb(priv->net, 0);
priv->tx_skb = NULL;
--
2.23.0



Good catch Markus :-)

/Sean


Re: [PATCH] can: mcp251x: add error check when wq alloc failed

2019-06-26 Thread Sean Nyekjaer




On 25/06/2019 16.03, Willem de Bruijn wrote:

On Tue, Jun 25, 2019 at 8:51 AM Weitao Hou  wrote:


add error check when workqueue alloc failed, and remove
redundant code to make it clear

Signed-off-by: Weitao Hou 


Acked-by: Willem de Bruijn 


Tested-by: Sean Nyekjaer 


[PATCH] mailmap: Update email for Sean Nyekjaer

2019-03-04 Thread Sean Nyekjaer
As I'll no longer be working with Prevas, add a mailmap entry so
any mail directed towards me reaches the appropriate mailbox.

Signed-off-by: Sean Nyekjaer 
---
 .mailmap | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.mailmap b/.mailmap
index ea98fcc197e4..4087826d8753 100644
--- a/.mailmap
+++ b/.mailmap
@@ -186,6 +186,7 @@ Santosh Shilimkar 
 Santosh Shilimkar 
 Sascha Hauer 
 S.Çağlar Onur 
+Sean Nyekjaer  
 Sebastian Reichel  
 Sebastian Reichel  
 Shiraz Hashim  
-- 
2.21.0



Re: [PATCH v4 1/2] iio: dac: Add AD5758 support

2018-06-29 Thread Sean Nyekjaer




On 29-06-2018 10:38, Stefan Popa wrote:

The AD5758 is a single channel DAC with 16-bit precision which uses the
SPI interface that operates at clock rates up to 50MHz.

The output can be configured as voltage or current and is available on a
single terminal.

Datasheet:
http://www.analog.com/media/en/technical-documentation/data-sheets/ad5758.pdf

Signed-off-by: Stefan Popa 

Reviewed-by:  Sean Nyekjaer 

---
Changes in v4:
- fixed kbuild test robot warnings.
Changes in v3:
- AD5758 can be both a current and voltage output DAC. The
  decision is made based on the DT and the channel type is set
  during probe.
- dc-dc-mode, range-microvolt and range-microamp are required
  properties.
- Introduced a slew-time-us property from which slew rate clock
  and slew rate step are calculated using a best match algorithm.
- Dropped the union from ad5758_state struct.
- Introduced a IIO_CHAN_INFO_OFFSET case part of ad5758_read_raw().
- Added a TODO comment which specifies that CRC is not supported.
- Kept the includes in order and removed the unused ones.
- Removed unused macros and shortened the lengthy ones.
- Renamed AD5758_REG_WRITE to AD5758_WR_FLAG_MSK.
- Added an explanation for enum ad5758_output_range.
- Used bsearch() instead of ad5758_get_array_index().
- Reduced the delays.
- strtobool() -> kstrtobool().

Changes in v2:
- removed unnecessary parenthesis in AD5758_REG_WRITE macro.
- added missing documentation fields of ad5758_state struct.
- changed the type of pwr_down attribute to bool.
- changed ad5758_dc_dc_ilimt[] to ad5758_dc_dc_ilim[].
- ad5758_spi_reg_write() now returns spi_write(st->spi,
  >data[0].d32, sizeof(st->data[0].d32));
- removed unnecessary new line in ad5758_calib_mem_refresh().
- changed the type of the mode parameter in
  ad5758_set_dc_dc_conv_mode() from unsigned int to enum
  ad5758_dc_dc_mode.
- removed unnecessary parenthesis in ad5758_slew_rate_config().
- changed the type of the enable parameter in
  ad5758_fault_prot_switch_en() from unsigned char to bool.
- the same as above, but for ad5758_internal_buffers_en().
- added a missing mutex_unlock() in ad5758_reg_access().
- moved the mutex_unlock() in ad5758_read_raw() and removed the
  unreachable return.
- returned directly where it was possible in ad5758_write_raw().
- removed the channel, scan_type and scan_index fields.
- in ad5758_parse_dt(), added missing "\n", and specified what the
  default mode actually is.
- returned directly at the end of ad5758_init().
- in ad5758_probe() used device managed for registering the device
  and returned directly without the error message.

  MAINTAINERS  |   7 +
  drivers/iio/dac/Kconfig  |  10 +
  drivers/iio/dac/Makefile |   1 +
  drivers/iio/dac/ad5758.c | 899 +++
  4 files changed, 917 insertions(+)
  create mode 100644 drivers/iio/dac/ad5758.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 00e9670..12d102d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -796,6 +796,13 @@ M: Michael Hanselmann 
  S:Supported
  F:drivers/macintosh/ams/
  
+ANALOG DEVICES INC AD5758 DRIVER

+M: Stefan Popa 
+L: linux-...@vger.kernel.org
+W: http://ez.analog.com/community/linux-device-drivers
+S: Supported
+F: drivers/iio/dac/ad5758.c
+
  ANALOG DEVICES INC AD5686 DRIVER
  M:Stefan Popa 
  L:linux...@vger.kernel.org
diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig
index 06e90de..80beb64 100644
--- a/drivers/iio/dac/Kconfig
+++ b/drivers/iio/dac/Kconfig
@@ -167,6 +167,16 @@ config AD5755
  To compile this driver as a module, choose M here: the
  module will be called ad5755.
  
+config AD5758

+   tristate "Analog Devices AD5758 DAC driver"
+   depends on SPI_MASTER
+   help
+ Say yes here to build support for Analog Devices AD5758 single channel
+ Digital to Analog Converter.
+
+ To compile this driver as a module, choose M here: the
+ module will be called ad5758.
+
  config AD5761
tristate "Analog Devices AD5761/61R/21/21R DAC driver"
depends on SPI_MASTER
diff --git a/drivers/iio/dac/Makefile b/drivers/iio/dac/Makefile
index 57aa230..a1b37cf 100644
--- a/drivers/iio/dac/Makefile
+++ b/drivers/iio/dac/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_AD5592R_BASE) += ad5592r-base.o
  obj-$(CONFIG_AD5592R) += ad5592r.o
  obj-$(CONFIG_AD5593R) += ad5593r.o
  obj-$(CONFIG_AD5755) += ad5755.o
+obj-$(CONFIG_AD5755) += ad5758.o
  obj-$(CONFIG_AD5761) += ad5761.o
  obj-$(CONFIG_AD5764) += ad5764.o
  obj-$(CONFIG_AD5791) += ad5791.o
diff --git a/drivers/iio/dac/ad

Re: [PATCH v4 1/2] iio: dac: Add AD5758 support

2018-06-29 Thread Sean Nyekjaer




On 29-06-2018 10:38, Stefan Popa wrote:

The AD5758 is a single channel DAC with 16-bit precision which uses the
SPI interface that operates at clock rates up to 50MHz.

The output can be configured as voltage or current and is available on a
single terminal.

Datasheet:
http://www.analog.com/media/en/technical-documentation/data-sheets/ad5758.pdf

Signed-off-by: Stefan Popa 

Reviewed-by:  Sean Nyekjaer 

---
Changes in v4:
- fixed kbuild test robot warnings.
Changes in v3:
- AD5758 can be both a current and voltage output DAC. The
  decision is made based on the DT and the channel type is set
  during probe.
- dc-dc-mode, range-microvolt and range-microamp are required
  properties.
- Introduced a slew-time-us property from which slew rate clock
  and slew rate step are calculated using a best match algorithm.
- Dropped the union from ad5758_state struct.
- Introduced a IIO_CHAN_INFO_OFFSET case part of ad5758_read_raw().
- Added a TODO comment which specifies that CRC is not supported.
- Kept the includes in order and removed the unused ones.
- Removed unused macros and shortened the lengthy ones.
- Renamed AD5758_REG_WRITE to AD5758_WR_FLAG_MSK.
- Added an explanation for enum ad5758_output_range.
- Used bsearch() instead of ad5758_get_array_index().
- Reduced the delays.
- strtobool() -> kstrtobool().

Changes in v2:
- removed unnecessary parenthesis in AD5758_REG_WRITE macro.
- added missing documentation fields of ad5758_state struct.
- changed the type of pwr_down attribute to bool.
- changed ad5758_dc_dc_ilimt[] to ad5758_dc_dc_ilim[].
- ad5758_spi_reg_write() now returns spi_write(st->spi,
  >data[0].d32, sizeof(st->data[0].d32));
- removed unnecessary new line in ad5758_calib_mem_refresh().
- changed the type of the mode parameter in
  ad5758_set_dc_dc_conv_mode() from unsigned int to enum
  ad5758_dc_dc_mode.
- removed unnecessary parenthesis in ad5758_slew_rate_config().
- changed the type of the enable parameter in
  ad5758_fault_prot_switch_en() from unsigned char to bool.
- the same as above, but for ad5758_internal_buffers_en().
- added a missing mutex_unlock() in ad5758_reg_access().
- moved the mutex_unlock() in ad5758_read_raw() and removed the
  unreachable return.
- returned directly where it was possible in ad5758_write_raw().
- removed the channel, scan_type and scan_index fields.
- in ad5758_parse_dt(), added missing "\n", and specified what the
  default mode actually is.
- returned directly at the end of ad5758_init().
- in ad5758_probe() used device managed for registering the device
  and returned directly without the error message.

  MAINTAINERS  |   7 +
  drivers/iio/dac/Kconfig  |  10 +
  drivers/iio/dac/Makefile |   1 +
  drivers/iio/dac/ad5758.c | 899 +++
  4 files changed, 917 insertions(+)
  create mode 100644 drivers/iio/dac/ad5758.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 00e9670..12d102d 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -796,6 +796,13 @@ M: Michael Hanselmann 
  S:Supported
  F:drivers/macintosh/ams/
  
+ANALOG DEVICES INC AD5758 DRIVER

+M: Stefan Popa 
+L: linux-...@vger.kernel.org
+W: http://ez.analog.com/community/linux-device-drivers
+S: Supported
+F: drivers/iio/dac/ad5758.c
+
  ANALOG DEVICES INC AD5686 DRIVER
  M:Stefan Popa 
  L:linux...@vger.kernel.org
diff --git a/drivers/iio/dac/Kconfig b/drivers/iio/dac/Kconfig
index 06e90de..80beb64 100644
--- a/drivers/iio/dac/Kconfig
+++ b/drivers/iio/dac/Kconfig
@@ -167,6 +167,16 @@ config AD5755
  To compile this driver as a module, choose M here: the
  module will be called ad5755.
  
+config AD5758

+   tristate "Analog Devices AD5758 DAC driver"
+   depends on SPI_MASTER
+   help
+ Say yes here to build support for Analog Devices AD5758 single channel
+ Digital to Analog Converter.
+
+ To compile this driver as a module, choose M here: the
+ module will be called ad5758.
+
  config AD5761
tristate "Analog Devices AD5761/61R/21/21R DAC driver"
depends on SPI_MASTER
diff --git a/drivers/iio/dac/Makefile b/drivers/iio/dac/Makefile
index 57aa230..a1b37cf 100644
--- a/drivers/iio/dac/Makefile
+++ b/drivers/iio/dac/Makefile
@@ -16,6 +16,7 @@ obj-$(CONFIG_AD5592R_BASE) += ad5592r-base.o
  obj-$(CONFIG_AD5592R) += ad5592r.o
  obj-$(CONFIG_AD5593R) += ad5593r.o
  obj-$(CONFIG_AD5755) += ad5755.o
+obj-$(CONFIG_AD5755) += ad5758.o
  obj-$(CONFIG_AD5761) += ad5761.o
  obj-$(CONFIG_AD5764) += ad5764.o
  obj-$(CONFIG_AD5791) += ad5791.o
diff --git a/drivers/iio/dac/ad