* [PATCH v2 0/2] i2c: exynos5: Add support for Exynos8895 SoC
@ 2024-12-21 15:19 Ivaylo Ivanov
2024-12-21 15:19 ` [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible Ivaylo Ivanov
2024-12-21 15:19 ` [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
0 siblings, 2 replies; 6+ messages in thread
From: Ivaylo Ivanov @ 2024-12-21 15:19 UTC (permalink / raw)
To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alim Akhtar
Cc: linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
Hey folks,
This series adds HSI2C support for Exynos8895 to i2c-exynos5. HSI2C
buses here are mostly available implemented in USIv1 blocks, with 5
available externally - hsi2c_0 to 4. hsi2c_0 is available for PMIC
(although I've never seen it used) and it uses BUSC clocks, which are
still not implemented in the current clock driver, so I've decided to
leave it out for now.
In the next few patchsets support for USIv1 will be added to the
exynos-usi driver and with that the rest of the I2C buses will be made
available in the device tree.
Kind regards,
Ivo
Changes in v2:
- Dropped nested-if in the binding, keeping in mind we'll always
provide only a single clock.
Ivaylo Ivanov (2):
dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible
i2c: exynos5: Add support for Exynos8895 SoC
.../devicetree/bindings/i2c/i2c-exynos5.yaml | 1 +
drivers/i2c/busses/i2c-exynos5.c | 31 +++++++++++++++++--
2 files changed, 30 insertions(+), 2 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible
2024-12-21 15:19 [PATCH v2 0/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
@ 2024-12-21 15:19 ` Ivaylo Ivanov
2024-12-22 11:48 ` Krzysztof Kozlowski
2024-12-21 15:19 ` [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
1 sibling, 1 reply; 6+ messages in thread
From: Ivaylo Ivanov @ 2024-12-21 15:19 UTC (permalink / raw)
To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alim Akhtar
Cc: linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
Add samsung,exynos8895-hsi2c dedicated compatible for representing
I2C of Exynos8895 SoC. I2C buses may be implemented both as a part
of USIv1 and separately.
Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
---
Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml b/Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml
index cc8bba553..70cc2ee9e 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml
+++ b/Documentation/devicetree/bindings/i2c/i2c-exynos5.yaml
@@ -25,6 +25,7 @@ properties:
- samsung,exynos5250-hsi2c # Exynos5250 and Exynos5420
- samsung,exynos5260-hsi2c # Exynos5260
- samsung,exynos7-hsi2c # Exynos7
+ - samsung,exynos8895-hsi2c
- samsung,exynosautov9-hsi2c
- items:
- enum:
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC
2024-12-21 15:19 [PATCH v2 0/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
2024-12-21 15:19 ` [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible Ivaylo Ivanov
@ 2024-12-21 15:19 ` Ivaylo Ivanov
2024-12-25 22:59 ` Andi Shyti
1 sibling, 1 reply; 6+ messages in thread
From: Ivaylo Ivanov @ 2024-12-21 15:19 UTC (permalink / raw)
To: Andi Shyti, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Alim Akhtar
Cc: linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
Exynos8895 functioning logic mostly follows I2C_TYPE_EXYNOS7, but timing
and temp calculations are slightly changed according to the following
logic:
FPCLK / FI2C = (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) + 2 *
((FLT_CYCLE + 3) - (FLT_CYCLE + 3) % (CLK_DIV + 1))
temp := (FPCLK / FI2C) - (FLT_CYCLE + 3) * 2
Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
---
drivers/i2c/busses/i2c-exynos5.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c
index e33001508..8d8ee42ba 100644
--- a/drivers/i2c/busses/i2c-exynos5.c
+++ b/drivers/i2c/busses/i2c-exynos5.c
@@ -168,6 +168,7 @@ enum i2c_type_exynos {
I2C_TYPE_EXYNOS5,
I2C_TYPE_EXYNOS7,
I2C_TYPE_EXYNOSAUTOV9,
+ I2C_TYPE_EXYNOS8895,
};
struct exynos5_i2c {
@@ -240,6 +241,11 @@ static const struct exynos_hsi2c_variant exynosautov9_hsi2c_data = {
.hw = I2C_TYPE_EXYNOSAUTOV9,
};
+static const struct exynos_hsi2c_variant exynos8895_hsi2c_data = {
+ .fifo_depth = 64,
+ .hw = I2C_TYPE_EXYNOS8895,
+};
+
static const struct of_device_id exynos5_i2c_match[] = {
{
.compatible = "samsung,exynos5-hsi2c",
@@ -256,6 +262,9 @@ static const struct of_device_id exynos5_i2c_match[] = {
}, {
.compatible = "samsung,exynosautov9-hsi2c",
.data = &exynosautov9_hsi2c_data
+ }, {
+ .compatible = "samsung,exynos8895-hsi2c",
+ .data = &exynos8895_hsi2c_data
}, {},
};
MODULE_DEVICE_TABLE(of, exynos5_i2c_match);
@@ -331,6 +340,14 @@ static int exynos5_i2c_set_timing(struct exynos5_i2c *i2c, bool hs_timings)
* clk_cycle := TSCLK_L + TSCLK_H
* temp := (CLK_DIV + 1) * (clk_cycle + 2)
*
+ * In case of HSI2C controllers in Exynos8895
+ * FPCLK / FI2C =
+ * (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) +
+ * 2 * ((FLT_CYCLE + 3) - (FLT_CYCLE + 3) % (CLK_DIV + 1))
+ *
+ * clk_cycle := TSCLK_L + TSCLK_H
+ * temp := (FPCLK / FI2C) - (FLT_CYCLE + 3) * 2
+ *
* Constraints: 4 <= temp, 0 <= CLK_DIV < 256, 2 <= clk_cycle <= 510
*
* To split SCL clock into low, high periods appropriately, one
@@ -352,11 +369,19 @@ static int exynos5_i2c_set_timing(struct exynos5_i2c *i2c, bool hs_timings)
*
*/
t_ftl_cycle = (readl(i2c->regs + HSI2C_CONF) >> 16) & 0x7;
- temp = clkin / op_clk - 8 - t_ftl_cycle;
+ if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
+ temp = clkin / op_clk - (t_ftl_cycle + 3) * 2;
+ else
+ temp = clkin / op_clk - 8 - t_ftl_cycle;
if (i2c->variant->hw != I2C_TYPE_EXYNOS7)
temp -= t_ftl_cycle;
div = temp / 512;
- clk_cycle = temp / (div + 1) - 2;
+
+ if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
+ clk_cycle = (temp + ((t_ftl_cycle + 3) % (div + 1)) * 2) /
+ (div + 1) - 2;
+ else
+ clk_cycle = temp / (div + 1) - 2;
if (temp < 4 || div >= 256 || clk_cycle < 2) {
dev_err(i2c->dev, "%s clock set-up failed\n",
hs_timings ? "HS" : "FS");
@@ -491,6 +516,8 @@ static irqreturn_t exynos5_i2c_irq(int irqno, void *dev_id)
switch (i2c->variant->hw) {
case I2C_TYPE_EXYNOSAUTOV9:
fallthrough;
+ case I2C_TYPE_EXYNOS8895:
+ fallthrough;
case I2C_TYPE_EXYNOS7:
if (int_status & HSI2C_INT_TRANS_DONE) {
i2c->trans_done = 1;
--
2.43.0
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible
2024-12-21 15:19 ` [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible Ivaylo Ivanov
@ 2024-12-22 11:48 ` Krzysztof Kozlowski
0 siblings, 0 replies; 6+ messages in thread
From: Krzysztof Kozlowski @ 2024-12-22 11:48 UTC (permalink / raw)
To: Ivaylo Ivanov, Andi Shyti, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Alim Akhtar
Cc: linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
On 21/12/2024 16:19, Ivaylo Ivanov wrote:
> Add samsung,exynos8895-hsi2c dedicated compatible for representing
> I2C of Exynos8895 SoC. I2C buses may be implemented both as a part
> of USIv1 and separately.
>
> Signed-off-by: Ivaylo Ivanov <ivo.ivanov.ivanov1@gmail.com>
> ---
Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org>
Best regards,
Krzysztof
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC
2024-12-21 15:19 ` [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
@ 2024-12-25 22:59 ` Andi Shyti
2024-12-26 9:50 ` Ivaylo Ivanov
0 siblings, 1 reply; 6+ messages in thread
From: Andi Shyti @ 2024-12-25 22:59 UTC (permalink / raw)
To: Ivaylo Ivanov
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Alim Akhtar,
linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
Hi Ivaylo,
On Sat, Dec 21, 2024 at 05:19:37PM +0200, Ivaylo Ivanov wrote:
> Exynos8895 functioning logic mostly follows I2C_TYPE_EXYNOS7, but timing
> and temp calculations are slightly changed according to the following
/changed/different/
> logic:
>
> FPCLK / FI2C = (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) + 2 *
> ((FLT_CYCLE + 3) - (FLT_CYCLE + 3) % (CLK_DIV + 1))
>
> temp := (FPCLK / FI2C) - (FLT_CYCLE + 3) * 2
>
...
> @@ -352,11 +369,19 @@ static int exynos5_i2c_set_timing(struct exynos5_i2c *i2c, bool hs_timings)
> *
> */
> t_ftl_cycle = (readl(i2c->regs + HSI2C_CONF) >> 16) & 0x7;
> - temp = clkin / op_clk - 8 - t_ftl_cycle;
> + if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
> + temp = clkin / op_clk - (t_ftl_cycle + 3) * 2;
> + else
> + temp = clkin / op_clk - 8 - t_ftl_cycle;
> if (i2c->variant->hw != I2C_TYPE_EXYNOS7)
> temp -= t_ftl_cycle;
Could you please make this:
if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
...
else if (i2c->variant->hw == I2C_TYPE_EXYNOS7)
...
else
...
For a better clarity.
Thanks,
Andi
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC
2024-12-25 22:59 ` Andi Shyti
@ 2024-12-26 9:50 ` Ivaylo Ivanov
0 siblings, 0 replies; 6+ messages in thread
From: Ivaylo Ivanov @ 2024-12-26 9:50 UTC (permalink / raw)
To: Andi Shyti
Cc: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Alim Akhtar,
linux-i2c, devicetree, linux-arm-kernel, linux-samsung-soc,
linux-kernel
On 12/26/24 00:59, Andi Shyti wrote:
> Hi Ivaylo,
>
> On Sat, Dec 21, 2024 at 05:19:37PM +0200, Ivaylo Ivanov wrote:
>> Exynos8895 functioning logic mostly follows I2C_TYPE_EXYNOS7, but timing
>> and temp calculations are slightly changed according to the following
> /changed/different/
Sure.
>
>> logic:
>>
>> FPCLK / FI2C = (CLK_DIV + 1) * (TSCLK_L + TSCLK_H + 2) + 2 *
>> ((FLT_CYCLE + 3) - (FLT_CYCLE + 3) % (CLK_DIV + 1))
>>
>> temp := (FPCLK / FI2C) - (FLT_CYCLE + 3) * 2
>>
> ...
>
>> @@ -352,11 +369,19 @@ static int exynos5_i2c_set_timing(struct exynos5_i2c *i2c, bool hs_timings)
>> *
>> */
>> t_ftl_cycle = (readl(i2c->regs + HSI2C_CONF) >> 16) & 0x7;
>> - temp = clkin / op_clk - 8 - t_ftl_cycle;
>> + if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
>> + temp = clkin / op_clk - (t_ftl_cycle + 3) * 2;
>> + else
>> + temp = clkin / op_clk - 8 - t_ftl_cycle;
>> if (i2c->variant->hw != I2C_TYPE_EXYNOS7)
>> temp -= t_ftl_cycle;
> Could you please make this:
>
> if (i2c->variant->hw == I2C_TYPE_EXYNOS8895)
> ...
> else if (i2c->variant->hw == I2C_TYPE_EXYNOS7)
> ...
> else
> ...
>
> For a better clarity.
Alright. Will post a v3 soon.
Thanks!
Best regards, Ivo.
>
> Thanks,
> Andi
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2024-12-26 9:52 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-21 15:19 [PATCH v2 0/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
2024-12-21 15:19 ` [PATCH v2 1/2] dt-bindings: i2c: exynos5: Add samsung,exynos8895-hsi2c compatible Ivaylo Ivanov
2024-12-22 11:48 ` Krzysztof Kozlowski
2024-12-21 15:19 ` [PATCH v2 2/2] i2c: exynos5: Add support for Exynos8895 SoC Ivaylo Ivanov
2024-12-25 22:59 ` Andi Shyti
2024-12-26 9:50 ` Ivaylo Ivanov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).