Lines Matching refs:i2c_priv

273 static int stm32_i2c_check_device_busy(struct stm32_i2c_priv *i2c_priv)
275 struct stm32_i2c_regs *regs = i2c_priv->regs;
284 static void stm32_i2c_message_start(struct stm32_i2c_priv *i2c_priv,
287 struct stm32_i2c_regs *regs = i2c_priv->regs;
327 static void stm32_i2c_handle_reload(struct stm32_i2c_priv *i2c_priv,
330 struct stm32_i2c_regs *regs = i2c_priv->regs;
345 static int stm32_i2c_wait_flags(struct stm32_i2c_priv *i2c_priv,
348 struct stm32_i2c_regs *regs = i2c_priv->regs;
364 static int stm32_i2c_check_end_of_message(struct stm32_i2c_priv *i2c_priv)
366 struct stm32_i2c_regs *regs = i2c_priv->regs;
372 ret = stm32_i2c_wait_flags(i2c_priv, mask, &status);
402 ret = stm32_i2c_wait_flags(i2c_priv, mask, &status);
420 static int stm32_i2c_message_xfer(struct stm32_i2c_priv *i2c_priv,
423 struct stm32_i2c_regs *regs = i2c_priv->regs;
434 stm32_i2c_message_start(i2c_priv, msg);
441 ret = stm32_i2c_wait_flags(i2c_priv, mask, &status);
463 ret = stm32_i2c_wait_flags(i2c_priv, mask, &status);
472 stm32_i2c_handle_reload(i2c_priv, msg);
476 ret = stm32_i2c_wait_flags(i2c_priv, mask, &status);
490 return stm32_i2c_check_end_of_message(i2c_priv);
496 struct stm32_i2c_priv *i2c_priv = dev_get_priv(bus);
499 ret = stm32_i2c_check_device_busy(i2c_priv);
504 ret = stm32_i2c_message_xfer(i2c_priv, msg, nmsgs == 1);
681 static int stm32_i2c_compute_timing(struct stm32_i2c_priv *i2c_priv,
684 struct stm32_i2c_setup *setup = &i2c_priv->setup;
707 setup->dnf = DIV_ROUND_CLOSEST(i2c_priv->dnf_dt, i2cclk);
749 static int stm32_i2c_setup_timing(struct stm32_i2c_priv *i2c_priv,
752 struct stm32_i2c_setup *setup = &i2c_priv->setup;
755 setup->speed_freq = i2c_priv->speed;
756 setup->clock_src = clk_get_rate(&i2c_priv->clk);
764 ret = stm32_i2c_compute_timing(i2c_priv, timing);
790 i2c_priv->speed = setup->speed_freq;
795 static int stm32_i2c_write_fm_plus_bits(struct stm32_i2c_priv *i2c_priv)
798 bool enable = i2c_priv->speed > I2C_SPEED_FAST_RATE;
801 if (IS_ERR_OR_NULL(i2c_priv->regmap))
804 if (i2c_priv->regmap_sreg == i2c_priv->regmap_creg)
805 ret = regmap_update_bits(i2c_priv->regmap,
806 i2c_priv->regmap_sreg,
807 i2c_priv->regmap_mask,
808 enable ? i2c_priv->regmap_mask : 0);
810 ret = regmap_write(i2c_priv->regmap,
811 enable ? i2c_priv->regmap_sreg :
812 i2c_priv->regmap_creg,
813 i2c_priv->regmap_mask);
818 static int stm32_i2c_hw_config(struct stm32_i2c_priv *i2c_priv)
820 struct stm32_i2c_regs *regs = i2c_priv->regs;
825 ret = stm32_i2c_setup_timing(i2c_priv, &t);
833 ret = stm32_i2c_write_fm_plus_bits(i2c_priv);
846 if (i2c_priv->setup.analog_filter)
853 STM32_I2C_CR1_DNF(i2c_priv->setup.dnf));
862 struct stm32_i2c_priv *i2c_priv = dev_get_priv(dev);
869 i2c_priv->speed = speed;
871 return stm32_i2c_hw_config(i2c_priv);
876 struct stm32_i2c_priv *i2c_priv = dev_get_priv(dev);
885 i2c_priv->regs = (struct stm32_i2c_regs *)addr;
887 ret = clk_get_by_index(dev, 0, &i2c_priv->clk);
891 ret = clk_enable(&i2c_priv->clk);
906 clk_disable(&i2c_priv->clk);
914 struct stm32_i2c_priv *i2c_priv = dev_get_priv(dev);
921 i2c_priv->setup.rise_time = dev_read_u32_default(dev,
925 i2c_priv->setup.fall_time = dev_read_u32_default(dev,
929 i2c_priv->dnf_dt = dev_read_u32_default(dev, "i2c-digital-filter-width-ns", 0);
931 i2c_priv->dnf_dt = 0;
933 i2c_priv->setup.analog_filter = dev_read_bool(dev, "i2c-analog-filter");
936 i2c_priv->regmap = syscon_regmap_lookup_by_phandle(dev,
938 if (!IS_ERR(i2c_priv->regmap)) {
945 i2c_priv->regmap_sreg = fmp[1];
946 i2c_priv->regmap_creg = fmp[1] + data->fmp_clr_offset;
947 i2c_priv->regmap_mask = fmp[2];