Re: [PATCH] Squashfs: fix xattr id and id lookup sanity checks
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
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
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
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
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
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
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
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}
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}
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)
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”
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
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
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
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
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