Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/base/regmap/regmap-i2c.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
+ drivers/base/regmap/regmap-i2c.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
-index 052170ca0255e..b707913233c9b 100644
--- a/drivers/base/regmap/regmap-i2c.c
+++ b/drivers/base/regmap/regmap-i2c.c
-@@ -246,8 +246,8 @@ static int regmap_i2c_smbus_i2c_read(void *context, const void *reg,
+@@ -246,8 +246,8 @@ static int regmap_i2c_smbus_i2c_read(voi
static struct regmap_bus regmap_i2c_smbus_i2c_block = {
.write = regmap_i2c_smbus_i2c_write,
.read = regmap_i2c_smbus_i2c_read,
+ .max_raw_write = I2C_SMBUS_BLOCK_MAX - 1,
};
- static int regmap_i2c_smbus_i2c_write_reg16(void *context, const void *data,
-@@ -303,8 +303,8 @@ static int regmap_i2c_smbus_i2c_read_reg16(void *context, const void *reg,
- static const struct regmap_bus regmap_i2c_smbus_i2c_block_reg16 = {
- .write = regmap_i2c_smbus_i2c_write_reg16,
- .read = regmap_i2c_smbus_i2c_read_reg16,
-- .max_raw_read = I2C_SMBUS_BLOCK_MAX,
-- .max_raw_write = I2C_SMBUS_BLOCK_MAX,
-+ .max_raw_read = I2C_SMBUS_BLOCK_MAX - 2,
-+ .max_raw_write = I2C_SMBUS_BLOCK_MAX - 2,
- };
-
static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
---
-2.40.1
-
+++ /dev/null
-From ee5d7277ae0fd7cda3208f95b7cfa51484e5a930 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 24 Apr 2020 20:33:58 +0800
-Subject: regmap-i2c: add 16-bit width registers support
-
-From: AceLan Kao <acelan.kao@canonical.com>
-
-[ Upstream commit 82f25bd73c0bee4d29df47007a4f7290695b7db7 ]
-
-This allows to access data with 16-bit width of registers
-via i2c SMBus block functions.
-
-The multi-command sequence of the reading function is not safe
-and may read the wrong data from other address if other commands
-are sent in-between the SMBus commands in the read function.
-
-Read performance:
- 32768 bytes (33 kB, 32 KiB) copied, 11.4869 s, 2.9 kB/s
-Write performance(with 1-byte page):
- 32768 bytes (33 kB, 32 KiB) copied, 129.591 s, 0.3 kB/s
-
-The implementation is inspired by below commit
-https://patchwork.ozlabs.org/patch/545292/
-
-v2: add more descriptions about the issue that maybe introduced
- by this commit
-
-Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
-Link: https://lore.kernel.org/r/20200424123358.144850-1-acelan.kao@canonical.com
-Signed-off-by: Mark Brown <broonie@kernel.org>
-Stable-dep-of: 0c9d2eb5e947 ("regmap: Account for register length in SMBus I/O limits")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/base/regmap/regmap-i2c.c | 61 ++++++++++++++++++++++++++++++++
- 1 file changed, 61 insertions(+)
-
-diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
-index 056acde5e7d34..052170ca0255e 100644
---- a/drivers/base/regmap/regmap-i2c.c
-+++ b/drivers/base/regmap/regmap-i2c.c
-@@ -250,6 +250,63 @@ static struct regmap_bus regmap_i2c_smbus_i2c_block = {
- .max_raw_write = I2C_SMBUS_BLOCK_MAX,
- };
-
-+static int regmap_i2c_smbus_i2c_write_reg16(void *context, const void *data,
-+ size_t count)
-+{
-+ struct device *dev = context;
-+ struct i2c_client *i2c = to_i2c_client(dev);
-+
-+ if (count < 2)
-+ return -EINVAL;
-+
-+ count--;
-+ return i2c_smbus_write_i2c_block_data(i2c, ((u8 *)data)[0], count,
-+ (u8 *)data + 1);
-+}
-+
-+static int regmap_i2c_smbus_i2c_read_reg16(void *context, const void *reg,
-+ size_t reg_size, void *val,
-+ size_t val_size)
-+{
-+ struct device *dev = context;
-+ struct i2c_client *i2c = to_i2c_client(dev);
-+ int ret, count, len = val_size;
-+
-+ if (reg_size != 2)
-+ return -EINVAL;
-+
-+ ret = i2c_smbus_write_byte_data(i2c, ((u16 *)reg)[0] & 0xff,
-+ ((u16 *)reg)[0] >> 8);
-+ if (ret < 0)
-+ return ret;
-+
-+ count = 0;
-+ do {
-+ /* Current Address Read */
-+ ret = i2c_smbus_read_byte(i2c);
-+ if (ret < 0)
-+ break;
-+
-+ *((u8 *)val++) = ret;
-+ count++;
-+ len--;
-+ } while (len > 0);
-+
-+ if (count == val_size)
-+ return 0;
-+ else if (ret < 0)
-+ return ret;
-+ else
-+ return -EIO;
-+}
-+
-+static const struct regmap_bus regmap_i2c_smbus_i2c_block_reg16 = {
-+ .write = regmap_i2c_smbus_i2c_write_reg16,
-+ .read = regmap_i2c_smbus_i2c_read_reg16,
-+ .max_raw_read = I2C_SMBUS_BLOCK_MAX,
-+ .max_raw_write = I2C_SMBUS_BLOCK_MAX,
-+};
-+
- static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
- const struct regmap_config *config)
- {
-@@ -259,6 +316,10 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
- i2c_check_functionality(i2c->adapter,
- I2C_FUNC_SMBUS_I2C_BLOCK))
- return ®map_i2c_smbus_i2c_block;
-+ else if (config->val_bits == 8 && config->reg_bits == 16 &&
-+ i2c_check_functionality(i2c->adapter,
-+ I2C_FUNC_SMBUS_I2C_BLOCK))
-+ return ®map_i2c_smbus_i2c_block_reg16;
- else if (config->val_bits == 16 && config->reg_bits == 8 &&
- i2c_check_functionality(i2c->adapter,
- I2C_FUNC_SMBUS_WORD_DATA))
---
-2.40.1
-
dm-integrity-reduce-vmalloc-space-footprint-on-32-bi.patch
exfat-add-bitmap-operations.patch
exfat-use-kvmalloc_array-kvfree-instead-of-kmalloc_a.patch
-regmap-i2c-add-16-bit-width-registers-support.patch
regmap-account-for-register-length-in-smbus-i-o-limi.patch
drm-amd-display-do-not-wait-for-mpc-idle-if-tg-is-di.patch
drm-amd-display-check-tg-is-non-null-before-checking.patch
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
- drivers/base/regmap/regmap-i2c.c | 8 ++++----
- 1 file changed, 4 insertions(+), 4 deletions(-)
+ drivers/base/regmap/regmap-i2c.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
-diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
-index 7f924797be58e..90990c22be41d 100644
--- a/drivers/base/regmap/regmap-i2c.c
+++ b/drivers/base/regmap/regmap-i2c.c
-@@ -242,8 +242,8 @@ static int regmap_i2c_smbus_i2c_read(void *context, const void *reg,
+@@ -242,8 +242,8 @@ static int regmap_i2c_smbus_i2c_read(voi
static struct regmap_bus regmap_i2c_smbus_i2c_block = {
.write = regmap_i2c_smbus_i2c_write,
.read = regmap_i2c_smbus_i2c_read,
+ .max_raw_write = I2C_SMBUS_BLOCK_MAX - 1,
};
- static int regmap_i2c_smbus_i2c_write_reg16(void *context, const void *data,
-@@ -299,8 +299,8 @@ static int regmap_i2c_smbus_i2c_read_reg16(void *context, const void *reg,
- static const struct regmap_bus regmap_i2c_smbus_i2c_block_reg16 = {
- .write = regmap_i2c_smbus_i2c_write_reg16,
- .read = regmap_i2c_smbus_i2c_read_reg16,
-- .max_raw_read = I2C_SMBUS_BLOCK_MAX,
-- .max_raw_write = I2C_SMBUS_BLOCK_MAX,
-+ .max_raw_read = I2C_SMBUS_BLOCK_MAX - 2,
-+ .max_raw_write = I2C_SMBUS_BLOCK_MAX - 2,
- };
-
static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
---
-2.40.1
-
+++ /dev/null
-From d7cfb93169b14870e3aade2ed9fe4242e4cc2640 Mon Sep 17 00:00:00 2001
-From: Sasha Levin <sashal@kernel.org>
-Date: Fri, 24 Apr 2020 20:33:58 +0800
-Subject: regmap-i2c: add 16-bit width registers support
-
-From: AceLan Kao <acelan.kao@canonical.com>
-
-[ Upstream commit 82f25bd73c0bee4d29df47007a4f7290695b7db7 ]
-
-This allows to access data with 16-bit width of registers
-via i2c SMBus block functions.
-
-The multi-command sequence of the reading function is not safe
-and may read the wrong data from other address if other commands
-are sent in-between the SMBus commands in the read function.
-
-Read performance:
- 32768 bytes (33 kB, 32 KiB) copied, 11.4869 s, 2.9 kB/s
-Write performance(with 1-byte page):
- 32768 bytes (33 kB, 32 KiB) copied, 129.591 s, 0.3 kB/s
-
-The implementation is inspired by below commit
-https://patchwork.ozlabs.org/patch/545292/
-
-v2: add more descriptions about the issue that maybe introduced
- by this commit
-
-Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
-Link: https://lore.kernel.org/r/20200424123358.144850-1-acelan.kao@canonical.com
-Signed-off-by: Mark Brown <broonie@kernel.org>
-Stable-dep-of: 0c9d2eb5e947 ("regmap: Account for register length in SMBus I/O limits")
-Signed-off-by: Sasha Levin <sashal@kernel.org>
----
- drivers/base/regmap/regmap-i2c.c | 61 ++++++++++++++++++++++++++++++++
- 1 file changed, 61 insertions(+)
-
-diff --git a/drivers/base/regmap/regmap-i2c.c b/drivers/base/regmap/regmap-i2c.c
-index ac9b31c57967d..7f924797be58e 100644
---- a/drivers/base/regmap/regmap-i2c.c
-+++ b/drivers/base/regmap/regmap-i2c.c
-@@ -246,6 +246,63 @@ static struct regmap_bus regmap_i2c_smbus_i2c_block = {
- .max_raw_write = I2C_SMBUS_BLOCK_MAX,
- };
-
-+static int regmap_i2c_smbus_i2c_write_reg16(void *context, const void *data,
-+ size_t count)
-+{
-+ struct device *dev = context;
-+ struct i2c_client *i2c = to_i2c_client(dev);
-+
-+ if (count < 2)
-+ return -EINVAL;
-+
-+ count--;
-+ return i2c_smbus_write_i2c_block_data(i2c, ((u8 *)data)[0], count,
-+ (u8 *)data + 1);
-+}
-+
-+static int regmap_i2c_smbus_i2c_read_reg16(void *context, const void *reg,
-+ size_t reg_size, void *val,
-+ size_t val_size)
-+{
-+ struct device *dev = context;
-+ struct i2c_client *i2c = to_i2c_client(dev);
-+ int ret, count, len = val_size;
-+
-+ if (reg_size != 2)
-+ return -EINVAL;
-+
-+ ret = i2c_smbus_write_byte_data(i2c, ((u16 *)reg)[0] & 0xff,
-+ ((u16 *)reg)[0] >> 8);
-+ if (ret < 0)
-+ return ret;
-+
-+ count = 0;
-+ do {
-+ /* Current Address Read */
-+ ret = i2c_smbus_read_byte(i2c);
-+ if (ret < 0)
-+ break;
-+
-+ *((u8 *)val++) = ret;
-+ count++;
-+ len--;
-+ } while (len > 0);
-+
-+ if (count == val_size)
-+ return 0;
-+ else if (ret < 0)
-+ return ret;
-+ else
-+ return -EIO;
-+}
-+
-+static const struct regmap_bus regmap_i2c_smbus_i2c_block_reg16 = {
-+ .write = regmap_i2c_smbus_i2c_write_reg16,
-+ .read = regmap_i2c_smbus_i2c_read_reg16,
-+ .max_raw_read = I2C_SMBUS_BLOCK_MAX,
-+ .max_raw_write = I2C_SMBUS_BLOCK_MAX,
-+};
-+
- static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
- const struct regmap_config *config)
- {
-@@ -255,6 +312,10 @@ static const struct regmap_bus *regmap_get_i2c_bus(struct i2c_client *i2c,
- i2c_check_functionality(i2c->adapter,
- I2C_FUNC_SMBUS_I2C_BLOCK))
- return ®map_i2c_smbus_i2c_block;
-+ else if (config->val_bits == 8 && config->reg_bits == 16 &&
-+ i2c_check_functionality(i2c->adapter,
-+ I2C_FUNC_SMBUS_I2C_BLOCK))
-+ return ®map_i2c_smbus_i2c_block_reg16;
- else if (config->val_bits == 16 && config->reg_bits == 8 &&
- i2c_check_functionality(i2c->adapter,
- I2C_FUNC_SMBUS_WORD_DATA))
---
-2.40.1
-
alsa-pcm-set-per-card-upper-limit-of-pcm-buffer-allo.patch
alsa-pcm-use-sg-buffer-only-when-direct-dma-is-avail.patch
alsa-pcm-fix-potential-data-race-at-pcm-memory-alloc.patch
-regmap-i2c-add-16-bit-width-registers-support.patch
regmap-account-for-register-length-in-smbus-i-o-limi.patch
asoc-fsl_sai-refine-enable-disable-te-re-sequence-in.patch
asoc-fsl_sai-add-new-added-registers-and-new-bit-def.patch