|
@@ -518,9 +518,26 @@ static void uniphier_fi2c_hw_init(struct uniphier_fi2c_priv *priv)
|
|
|
|
|
|
uniphier_fi2c_reset(priv);
|
|
uniphier_fi2c_reset(priv);
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Standard-mode: tLOW + tHIGH = 10 us
|
|
|
|
+ * Fast-mode: tLOW + tHIGH = 2.5 us
|
|
|
|
+ */
|
|
writel(cyc, priv->membase + UNIPHIER_FI2C_CYC);
|
|
writel(cyc, priv->membase + UNIPHIER_FI2C_CYC);
|
|
- writel(cyc / 2, priv->membase + UNIPHIER_FI2C_LCTL);
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Standard-mode: tLOW = 4.7 us, tHIGH = 4.0 us, tBUF = 4.7 us
|
|
|
|
+ * Fast-mode: tLOW = 1.3 us, tHIGH = 0.6 us, tBUF = 1.3 us
|
|
|
|
+ * "tLow/tHIGH = 5/4" meets both.
|
|
|
|
+ */
|
|
|
|
+ writel(cyc * 5 / 9, priv->membase + UNIPHIER_FI2C_LCTL);
|
|
|
|
+ /*
|
|
|
|
+ * Standard-mode: tHD;STA = 4.0 us, tSU;STA = 4.7 us, tSU;STO = 4.0 us
|
|
|
|
+ * Fast-mode: tHD;STA = 0.6 us, tSU;STA = 0.6 us, tSU;STO = 0.6 us
|
|
|
|
+ */
|
|
writel(cyc / 2, priv->membase + UNIPHIER_FI2C_SSUT);
|
|
writel(cyc / 2, priv->membase + UNIPHIER_FI2C_SSUT);
|
|
|
|
+ /*
|
|
|
|
+ * Standard-mode: tSU;DAT = 250 ns
|
|
|
|
+ * Fast-mode: tSU;DAT = 100 ns
|
|
|
|
+ */
|
|
writel(cyc / 16, priv->membase + UNIPHIER_FI2C_DSUT);
|
|
writel(cyc / 16, priv->membase + UNIPHIER_FI2C_DSUT);
|
|
|
|
|
|
uniphier_fi2c_prepare_operation(priv);
|
|
uniphier_fi2c_prepare_operation(priv);
|