Lines Matching refs:dev

64 	struct dw_i2c_dev *dev = context;  in dw_reg_read()  local
66 *val = readl(dev->base + reg); in dw_reg_read()
73 struct dw_i2c_dev *dev = context; in dw_reg_write() local
75 writel(val, dev->base + reg); in dw_reg_write()
82 struct dw_i2c_dev *dev = context; in dw_reg_read_swab() local
84 *val = swab32(readl(dev->base + reg)); in dw_reg_read_swab()
91 struct dw_i2c_dev *dev = context; in dw_reg_write_swab() local
93 writel(swab32(val), dev->base + reg); in dw_reg_write_swab()
100 struct dw_i2c_dev *dev = context; in dw_reg_read_word() local
102 *val = readw(dev->base + reg) | in dw_reg_read_word()
103 (readw(dev->base + reg + 2) << 16); in dw_reg_read_word()
110 struct dw_i2c_dev *dev = context; in dw_reg_write_word() local
112 writew(val, dev->base + reg); in dw_reg_write_word()
113 writew(val >> 16, dev->base + reg + 2); in dw_reg_write_word()
126 int i2c_dw_init_regmap(struct dw_i2c_dev *dev) in i2c_dw_init_regmap() argument
144 if (dev->map) in i2c_dw_init_regmap()
147 ret = i2c_dw_acquire_lock(dev); in i2c_dw_init_regmap()
151 reg = readl(dev->base + DW_IC_COMP_TYPE); in i2c_dw_init_regmap()
152 i2c_dw_release_lock(dev); in i2c_dw_init_regmap()
154 if ((dev->flags & MODEL_MASK) == MODEL_AMD_NAVI_GPU) in i2c_dw_init_regmap()
164 dev_err(dev->dev, in i2c_dw_init_regmap()
175 dev->map = devm_regmap_init(dev->dev, NULL, dev, &map_cfg); in i2c_dw_init_regmap()
176 if (IS_ERR(dev->map)) { in i2c_dw_init_regmap()
177 dev_err(dev->dev, "Failed to init the registers map\n"); in i2c_dw_init_regmap()
178 return PTR_ERR(dev->map); in i2c_dw_init_regmap()
191 int i2c_dw_validate_speed(struct dw_i2c_dev *dev) in i2c_dw_validate_speed() argument
193 struct i2c_timings *t = &dev->timings; in i2c_dw_validate_speed()
205 dev_err(dev->dev, in i2c_dw_validate_speed()
260 struct dw_i2c_dev *dev = dev_get_drvdata(device); in i2c_dw_acpi_configure() local
261 struct i2c_timings *t = &dev->timings; in i2c_dw_acpi_configure()
268 i2c_dw_acpi_params(device, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, &ss_ht); in i2c_dw_acpi_configure()
269 i2c_dw_acpi_params(device, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &fs_ht); in i2c_dw_acpi_configure()
270 i2c_dw_acpi_params(device, "FPCN", &dev->fp_hcnt, &dev->fp_lcnt, &fp_ht); in i2c_dw_acpi_configure()
271 i2c_dw_acpi_params(device, "HSCN", &dev->hs_hcnt, &dev->hs_lcnt, &hs_ht); in i2c_dw_acpi_configure()
275 dev->sda_hold_time = ss_ht; in i2c_dw_acpi_configure()
278 dev->sda_hold_time = fp_ht; in i2c_dw_acpi_configure()
281 dev->sda_hold_time = hs_ht; in i2c_dw_acpi_configure()
285 dev->sda_hold_time = fs_ht; in i2c_dw_acpi_configure()
317 void i2c_dw_adjust_bus_speed(struct dw_i2c_dev *dev) in i2c_dw_adjust_bus_speed() argument
319 u32 acpi_speed = i2c_dw_acpi_round_bus_speed(dev->dev); in i2c_dw_adjust_bus_speed()
320 struct i2c_timings *t = &dev->timings; in i2c_dw_adjust_bus_speed()
392 int i2c_dw_set_sda_hold(struct dw_i2c_dev *dev) in i2c_dw_set_sda_hold() argument
397 ret = i2c_dw_acquire_lock(dev); in i2c_dw_set_sda_hold()
402 ret = regmap_read(dev->map, DW_IC_COMP_VERSION, &reg); in i2c_dw_set_sda_hold()
407 if (!dev->sda_hold_time) { in i2c_dw_set_sda_hold()
409 ret = regmap_read(dev->map, DW_IC_SDA_HOLD, in i2c_dw_set_sda_hold()
410 &dev->sda_hold_time); in i2c_dw_set_sda_hold()
422 if (!(dev->sda_hold_time & DW_IC_SDA_HOLD_RX_MASK)) in i2c_dw_set_sda_hold()
423 dev->sda_hold_time |= 1 << DW_IC_SDA_HOLD_RX_SHIFT; in i2c_dw_set_sda_hold()
425 dev_dbg(dev->dev, "SDA Hold Time TX:RX = %d:%d\n", in i2c_dw_set_sda_hold()
426 dev->sda_hold_time & ~(u32)DW_IC_SDA_HOLD_RX_MASK, in i2c_dw_set_sda_hold()
427 dev->sda_hold_time >> DW_IC_SDA_HOLD_RX_SHIFT); in i2c_dw_set_sda_hold()
428 } else if (dev->set_sda_hold_time) { in i2c_dw_set_sda_hold()
429 dev->set_sda_hold_time(dev); in i2c_dw_set_sda_hold()
430 } else if (dev->sda_hold_time) { in i2c_dw_set_sda_hold()
431 dev_warn(dev->dev, in i2c_dw_set_sda_hold()
433 dev->sda_hold_time = 0; in i2c_dw_set_sda_hold()
437 i2c_dw_release_lock(dev); in i2c_dw_set_sda_hold()
442 void __i2c_dw_disable(struct dw_i2c_dev *dev) in __i2c_dw_disable() argument
451 regmap_read(dev->map, DW_IC_RAW_INTR_STAT, &raw_intr_stats); in __i2c_dw_disable()
452 regmap_read(dev->map, DW_IC_ENABLE, &enable); in __i2c_dw_disable()
456 regmap_write(dev->map, DW_IC_ENABLE, enable | DW_IC_ENABLE_ABORT); in __i2c_dw_disable()
457 ret = regmap_read_poll_timeout(dev->map, DW_IC_ENABLE, enable, in __i2c_dw_disable()
461 dev_err(dev->dev, "timeout while trying to abort current transfer\n"); in __i2c_dw_disable()
465 __i2c_dw_disable_nowait(dev); in __i2c_dw_disable()
470 regmap_read(dev->map, DW_IC_ENABLE_STATUS, &status); in __i2c_dw_disable()
482 dev_warn(dev->dev, "timeout in disabling adapter\n"); in __i2c_dw_disable()
485 u32 i2c_dw_clk_rate(struct dw_i2c_dev *dev) in i2c_dw_clk_rate() argument
491 if (WARN_ON_ONCE(!dev->get_clk_rate_khz)) in i2c_dw_clk_rate()
493 return dev->get_clk_rate_khz(dev); in i2c_dw_clk_rate()
496 int i2c_dw_prepare_clk(struct dw_i2c_dev *dev, bool prepare) in i2c_dw_prepare_clk() argument
502 ret = clk_prepare_enable(dev->pclk); in i2c_dw_prepare_clk()
506 ret = clk_prepare_enable(dev->clk); in i2c_dw_prepare_clk()
508 clk_disable_unprepare(dev->pclk); in i2c_dw_prepare_clk()
513 clk_disable_unprepare(dev->clk); in i2c_dw_prepare_clk()
514 clk_disable_unprepare(dev->pclk); in i2c_dw_prepare_clk()
520 int i2c_dw_acquire_lock(struct dw_i2c_dev *dev) in i2c_dw_acquire_lock() argument
524 if (!dev->acquire_lock) in i2c_dw_acquire_lock()
527 ret = dev->acquire_lock(); in i2c_dw_acquire_lock()
531 dev_err(dev->dev, "couldn't acquire bus ownership\n"); in i2c_dw_acquire_lock()
536 void i2c_dw_release_lock(struct dw_i2c_dev *dev) in i2c_dw_release_lock() argument
538 if (dev->release_lock) in i2c_dw_release_lock()
539 dev->release_lock(); in i2c_dw_release_lock()
545 int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev) in i2c_dw_wait_bus_not_busy() argument
550 ret = regmap_read_poll_timeout(dev->map, DW_IC_STATUS, status, in i2c_dw_wait_bus_not_busy()
554 dev_warn(dev->dev, "timeout waiting for bus ready\n"); in i2c_dw_wait_bus_not_busy()
556 i2c_recover_bus(&dev->adapter); in i2c_dw_wait_bus_not_busy()
558 regmap_read(dev->map, DW_IC_STATUS, &status); in i2c_dw_wait_bus_not_busy()
566 int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev) in i2c_dw_handle_tx_abort() argument
568 unsigned long abort_source = dev->abort_source; in i2c_dw_handle_tx_abort()
573 dev_dbg(dev->dev, in i2c_dw_handle_tx_abort()
579 dev_err(dev->dev, "%s: %s\n", __func__, abort_sources[i]); in i2c_dw_handle_tx_abort()
589 int i2c_dw_set_fifo_size(struct dw_i2c_dev *dev) in i2c_dw_set_fifo_size() argument
596 if ((dev->flags & MODEL_MASK) == MODEL_WANGXUN_SP) { in i2c_dw_set_fifo_size()
597 dev->tx_fifo_depth = TXGBE_TX_FIFO_DEPTH; in i2c_dw_set_fifo_size()
598 dev->rx_fifo_depth = TXGBE_RX_FIFO_DEPTH; in i2c_dw_set_fifo_size()
607 ret = i2c_dw_acquire_lock(dev); in i2c_dw_set_fifo_size()
611 ret = regmap_read(dev->map, DW_IC_COMP_PARAM_1, &param); in i2c_dw_set_fifo_size()
612 i2c_dw_release_lock(dev); in i2c_dw_set_fifo_size()
618 if (!dev->tx_fifo_depth) { in i2c_dw_set_fifo_size()
619 dev->tx_fifo_depth = tx_fifo_depth; in i2c_dw_set_fifo_size()
620 dev->rx_fifo_depth = rx_fifo_depth; in i2c_dw_set_fifo_size()
622 dev->tx_fifo_depth = min_t(u32, dev->tx_fifo_depth, in i2c_dw_set_fifo_size()
624 dev->rx_fifo_depth = min_t(u32, dev->rx_fifo_depth, in i2c_dw_set_fifo_size()
633 struct dw_i2c_dev *dev = i2c_get_adapdata(adap); in i2c_dw_func() local
635 return dev->functionality; in i2c_dw_func()
638 void i2c_dw_disable(struct dw_i2c_dev *dev) in i2c_dw_disable() argument
643 ret = i2c_dw_acquire_lock(dev); in i2c_dw_disable()
648 __i2c_dw_disable(dev); in i2c_dw_disable()
651 regmap_write(dev->map, DW_IC_INTR_MASK, 0); in i2c_dw_disable()
652 regmap_read(dev->map, DW_IC_CLR_INTR, &dummy); in i2c_dw_disable()
654 i2c_dw_release_lock(dev); in i2c_dw_disable()