]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
i2c: sh_mobile: Switch R-Mobile A1/APE6 and SH-Mobile AG5 to new frequency calculation
authorGeert Uytterhoeven <geert+renesas@glider.be>
Wed, 31 Jan 2024 16:09:30 +0000 (17:09 +0100)
committerAndi Shyti <andi.shyti@kernel.org>
Thu, 8 Feb 2024 08:34:17 +0000 (09:34 +0100)
Switch the R-Mobile A1, R-Mobile APE6, and SH-Mobile AG5 SoCs to the new
frequency calculation formula, to (a) avoid running the I2C bus too fast,
and (b) bring the low/high ratio closer to the recommended ratio 5/4.

As this makes fast_clock_dt_config and v2_freq_calc_dt_config identical,
merge them into a single fast_clock_dt_config.

Legacy SH users (sh7343, sh7366, and sh772[234]) are left alone, and
still use the old formula.

Measurement results on R-Mobile APE6 and SH-Mobile AG5 (fck=104 MHz,
clks_per_count=2):
  100 kHz: 106 kHz LH=1.12 before, 99.6 kHz L/H=1.22 after
  400 kHz: 384 kHz LH=1.67 before, 392 kHz L/H=1.27 after

Measurement results on R-Mobile A1 (fck=49.5 MHz, clks_per_count=1):
  100 kHz: 106 kHz L/H=1.09 before, 99.6 kHz L/H=1.20 after

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Wolfram Sang <wsa+renesas@sang-engineering.com>
Signed-off-by: Andi Shyti <andi.shyti@kernel.org>
drivers/i2c/busses/i2c-sh_mobile.c

index 5adbe62cf6212865aa6df5bb532f9def35196e4a..c65ac3d7eadc5b58c5d9e29d9a6ec0d894e2e844 100644 (file)
@@ -773,7 +773,7 @@ static int sh_mobile_i2c_r8a7740_workaround(struct sh_mobile_i2c_data *pd)
        iic_wr(pd, ICCR, ICCR_TRS);
        udelay(10);
 
-       return sh_mobile_i2c_init(pd);
+       return sh_mobile_i2c_v2_init(pd);
 }
 
 static const struct sh_mobile_dt_config default_dt_config = {
@@ -782,11 +782,6 @@ static const struct sh_mobile_dt_config default_dt_config = {
 };
 
 static const struct sh_mobile_dt_config fast_clock_dt_config = {
-       .clks_per_count = 2,
-       .setup = sh_mobile_i2c_init,
-};
-
-static const struct sh_mobile_dt_config v2_freq_calc_dt_config = {
        .clks_per_count = 2,
        .setup = sh_mobile_i2c_v2_init,
 };
@@ -799,17 +794,17 @@ static const struct sh_mobile_dt_config r8a7740_dt_config = {
 static const struct of_device_id sh_mobile_i2c_dt_ids[] = {
        { .compatible = "renesas,iic-r8a73a4", .data = &fast_clock_dt_config },
        { .compatible = "renesas,iic-r8a7740", .data = &r8a7740_dt_config },
-       { .compatible = "renesas,iic-r8a774c0", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7790", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7791", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7792", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7793", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7794", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a7795", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,iic-r8a77990", .data = &v2_freq_calc_dt_config },
+       { .compatible = "renesas,iic-r8a774c0", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7790", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7791", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7792", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7793", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7794", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a7795", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,iic-r8a77990", .data = &fast_clock_dt_config },
        { .compatible = "renesas,iic-sh73a0", .data = &fast_clock_dt_config },
-       { .compatible = "renesas,rcar-gen2-iic", .data = &v2_freq_calc_dt_config },
-       { .compatible = "renesas,rcar-gen3-iic", .data = &v2_freq_calc_dt_config },
+       { .compatible = "renesas,rcar-gen2-iic", .data = &fast_clock_dt_config },
+       { .compatible = "renesas,rcar-gen3-iic", .data = &fast_clock_dt_config },
        { .compatible = "renesas,rmobile-iic", .data = &default_dt_config },
        {},
 };