Skip to content

Commit 7fd2bf8

Browse files
committed
Merge branch 'i2c/for-current-fixed' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c fixes from Wolfram Sang: "Three driver bugfixes and one leak fix for the core" * 'i2c/for-current-fixed' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: i2c: mlxcpld: Modify register setting for 400KHz frequency i2c: mlxcpld: Fix criteria for frequency setting i2c: mediatek: Add OFFSET_EXT_CONF setting back i2c: acpi: fix resource leak in reconfiguration device addition
2 parents 0950fcb + fa10491 commit 7fd2bf8

File tree

3 files changed

+13
-3
lines changed

3 files changed

+13
-3
lines changed

drivers/i2c/busses/i2c-mlxcpld.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
#define MLXCPLD_LPCI2C_NACK_IND 2
5050

5151
#define MLXCPLD_I2C_FREQ_1000KHZ_SET 0x04
52-
#define MLXCPLD_I2C_FREQ_400KHZ_SET 0x0f
52+
#define MLXCPLD_I2C_FREQ_400KHZ_SET 0x0c
5353
#define MLXCPLD_I2C_FREQ_100KHZ_SET 0x42
5454

5555
enum mlxcpld_i2c_frequency {
@@ -495,7 +495,7 @@ mlxcpld_i2c_set_frequency(struct mlxcpld_i2c_priv *priv,
495495
return err;
496496

497497
/* Set frequency only if it is not 100KHz, which is default. */
498-
switch ((data->reg & data->mask) >> data->bit) {
498+
switch ((regval & data->mask) >> data->bit) {
499499
case MLXCPLD_I2C_FREQ_1000KHZ:
500500
freq = MLXCPLD_I2C_FREQ_1000KHZ_SET;
501501
break;

drivers/i2c/busses/i2c-mt65xx.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@
4141
#define I2C_HANDSHAKE_RST 0x0020
4242
#define I2C_FIFO_ADDR_CLR 0x0001
4343
#define I2C_DELAY_LEN 0x0002
44+
#define I2C_ST_START_CON 0x8001
45+
#define I2C_FS_START_CON 0x1800
4446
#define I2C_TIME_CLR_VALUE 0x0000
4547
#define I2C_TIME_DEFAULT_VALUE 0x0003
4648
#define I2C_WRRD_TRANAC_VALUE 0x0002
@@ -480,6 +482,7 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
480482
{
481483
u16 control_reg;
482484
u16 intr_stat_reg;
485+
u16 ext_conf_val;
483486

484487
mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_START);
485488
intr_stat_reg = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
@@ -518,8 +521,13 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
518521
if (i2c->dev_comp->ltiming_adjust)
519522
mtk_i2c_writew(i2c, i2c->ltiming_reg, OFFSET_LTIMING);
520523

524+
if (i2c->speed_hz <= I2C_MAX_STANDARD_MODE_FREQ)
525+
ext_conf_val = I2C_ST_START_CON;
526+
else
527+
ext_conf_val = I2C_FS_START_CON;
528+
521529
if (i2c->dev_comp->timing_adjust) {
522-
mtk_i2c_writew(i2c, i2c->ac_timing.ext, OFFSET_EXT_CONF);
530+
ext_conf_val = i2c->ac_timing.ext;
523531
mtk_i2c_writew(i2c, i2c->ac_timing.inter_clk_div,
524532
OFFSET_CLOCK_DIV);
525533
mtk_i2c_writew(i2c, I2C_SCL_MIS_COMP_VALUE,
@@ -544,6 +552,7 @@ static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
544552
OFFSET_HS_STA_STO_AC_TIMING);
545553
}
546554
}
555+
mtk_i2c_writew(i2c, ext_conf_val, OFFSET_EXT_CONF);
547556

548557
/* If use i2c pin from PMIC mt6397 side, need set PATH_DIR first */
549558
if (i2c->have_pmic)

drivers/i2c/i2c-core-acpi.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,7 @@ static int i2c_acpi_notify(struct notifier_block *nb, unsigned long value,
454454
break;
455455

456456
i2c_acpi_register_device(adapter, adev, &info);
457+
put_device(&adapter->dev);
457458
break;
458459
case ACPI_RECONFIG_DEVICE_REMOVE:
459460
if (!acpi_device_enumerated(adev))

0 commit comments

Comments
 (0)