Lines Matching refs:dev

38 static u32 i2c_dw_get_clk_rate_khz(struct dw_i2c_dev *dev)  in i2c_dw_get_clk_rate_khz()  argument
40 return clk_get_rate(dev->clk) / KILO; in i2c_dw_get_clk_rate_khz()
75 struct dw_i2c_dev *dev = context; in bt1_i2c_read() local
82 ret = regmap_write(dev->sysmap, BT1_I2C_CTL, in bt1_i2c_read()
87 return regmap_read(dev->sysmap, BT1_I2C_DO, val); in bt1_i2c_read()
92 struct dw_i2c_dev *dev = context; in bt1_i2c_write() local
95 ret = regmap_write(dev->sysmap, BT1_I2C_DI, val); in bt1_i2c_write()
99 return regmap_write(dev->sysmap, BT1_I2C_CTL, in bt1_i2c_write()
113 static int bt1_i2c_request_regs(struct dw_i2c_dev *dev) in bt1_i2c_request_regs() argument
115 dev->sysmap = syscon_node_to_regmap(dev->dev->of_node->parent); in bt1_i2c_request_regs()
116 if (IS_ERR(dev->sysmap)) in bt1_i2c_request_regs()
117 return PTR_ERR(dev->sysmap); in bt1_i2c_request_regs()
119 dev->map = devm_regmap_init(dev->dev, NULL, dev, &bt1_i2c_cfg); in bt1_i2c_request_regs()
120 return PTR_ERR_OR_ZERO(dev->map); in bt1_i2c_request_regs()
127 static int mscc_twi_set_sda_hold_time(struct dw_i2c_dev *dev) in mscc_twi_set_sda_hold_time() argument
129 writel((dev->sda_hold_time << 1) | MSCC_ICPU_CFG_TWI_DELAY_ENABLE, in mscc_twi_set_sda_hold_time()
130 dev->ext + MSCC_ICPU_CFG_TWI_DELAY); in mscc_twi_set_sda_hold_time()
137 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); in dw_i2c_of_configure() local
139 switch (dev->flags & MODEL_MASK) { in dw_i2c_of_configure()
141 dev->ext = devm_platform_ioremap_resource(pdev, 1); in dw_i2c_of_configure()
142 if (!IS_ERR(dev->ext)) in dw_i2c_of_configure()
143 dev->set_sda_hold_time = mscc_twi_set_sda_hold_time; in dw_i2c_of_configure()
160 static int bt1_i2c_request_regs(struct dw_i2c_dev *dev) in bt1_i2c_request_regs() argument
171 static int txgbe_i2c_request_regs(struct dw_i2c_dev *dev) in txgbe_i2c_request_regs() argument
173 dev->map = dev_get_regmap(dev->dev->parent, NULL); in txgbe_i2c_request_regs()
174 if (!dev->map) in txgbe_i2c_request_regs()
180 static void dw_i2c_plat_pm_cleanup(struct dw_i2c_dev *dev) in dw_i2c_plat_pm_cleanup() argument
182 pm_runtime_disable(dev->dev); in dw_i2c_plat_pm_cleanup()
184 if (dev->shared_with_punit) in dw_i2c_plat_pm_cleanup()
185 pm_runtime_put_noidle(dev->dev); in dw_i2c_plat_pm_cleanup()
188 static int dw_i2c_plat_request_regs(struct dw_i2c_dev *dev) in dw_i2c_plat_request_regs() argument
190 struct platform_device *pdev = to_platform_device(dev->dev); in dw_i2c_plat_request_regs()
193 switch (dev->flags & MODEL_MASK) { in dw_i2c_plat_request_regs()
195 ret = bt1_i2c_request_regs(dev); in dw_i2c_plat_request_regs()
198 ret = txgbe_i2c_request_regs(dev); in dw_i2c_plat_request_regs()
201 dev->base = devm_platform_ioremap_resource(pdev, 0); in dw_i2c_plat_request_regs()
202 ret = PTR_ERR_OR_ZERO(dev->base); in dw_i2c_plat_request_regs()
234 static int i2c_dw_probe_lock_support(struct dw_i2c_dev *dev) in i2c_dw_probe_lock_support() argument
242 dev->semaphore_idx = -1; in i2c_dw_probe_lock_support()
245 ret = ptr->probe(dev); in i2c_dw_probe_lock_support()
260 dev->semaphore_idx = i; in i2c_dw_probe_lock_support()
267 static void i2c_dw_remove_lock_support(struct dw_i2c_dev *dev) in i2c_dw_remove_lock_support() argument
269 if (dev->semaphore_idx < 0) in i2c_dw_remove_lock_support()
272 if (i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove) in i2c_dw_remove_lock_support()
273 i2c_dw_semaphore_cb_table[dev->semaphore_idx].remove(dev); in i2c_dw_remove_lock_support()
279 struct dw_i2c_dev *dev; in dw_i2c_plat_probe() local
287 dev = devm_kzalloc(&pdev->dev, sizeof(struct dw_i2c_dev), GFP_KERNEL); in dw_i2c_plat_probe()
288 if (!dev) in dw_i2c_plat_probe()
291 dev->flags = (uintptr_t)device_get_match_data(&pdev->dev); in dw_i2c_plat_probe()
292 if (device_property_present(&pdev->dev, "wx,i2c-snps-model")) in dw_i2c_plat_probe()
293 dev->flags = MODEL_WANGXUN_SP; in dw_i2c_plat_probe()
295 dev->dev = &pdev->dev; in dw_i2c_plat_probe()
296 dev->irq = irq; in dw_i2c_plat_probe()
297 platform_set_drvdata(pdev, dev); in dw_i2c_plat_probe()
299 ret = dw_i2c_plat_request_regs(dev); in dw_i2c_plat_probe()
303 dev->rst = devm_reset_control_get_optional_exclusive(&pdev->dev, NULL); in dw_i2c_plat_probe()
304 if (IS_ERR(dev->rst)) in dw_i2c_plat_probe()
305 return PTR_ERR(dev->rst); in dw_i2c_plat_probe()
307 reset_control_deassert(dev->rst); in dw_i2c_plat_probe()
309 t = &dev->timings; in dw_i2c_plat_probe()
310 i2c_parse_fw_timings(&pdev->dev, t, false); in dw_i2c_plat_probe()
312 i2c_dw_adjust_bus_speed(dev); in dw_i2c_plat_probe()
314 if (pdev->dev.of_node) in dw_i2c_plat_probe()
317 if (has_acpi_companion(&pdev->dev)) in dw_i2c_plat_probe()
318 i2c_dw_acpi_configure(&pdev->dev); in dw_i2c_plat_probe()
320 ret = i2c_dw_validate_speed(dev); in dw_i2c_plat_probe()
324 ret = i2c_dw_probe_lock_support(dev); in dw_i2c_plat_probe()
328 i2c_dw_configure(dev); in dw_i2c_plat_probe()
331 dev->pclk = devm_clk_get_optional(&pdev->dev, "pclk"); in dw_i2c_plat_probe()
332 if (IS_ERR(dev->pclk)) { in dw_i2c_plat_probe()
333 ret = PTR_ERR(dev->pclk); in dw_i2c_plat_probe()
337 dev->clk = devm_clk_get_optional(&pdev->dev, NULL); in dw_i2c_plat_probe()
338 if (IS_ERR(dev->clk)) { in dw_i2c_plat_probe()
339 ret = PTR_ERR(dev->clk); in dw_i2c_plat_probe()
343 ret = i2c_dw_prepare_clk(dev, true); in dw_i2c_plat_probe()
347 if (dev->clk) { in dw_i2c_plat_probe()
350 dev->get_clk_rate_khz = i2c_dw_get_clk_rate_khz; in dw_i2c_plat_probe()
351 clk_khz = dev->get_clk_rate_khz(dev); in dw_i2c_plat_probe()
353 if (!dev->sda_hold_time && t->sda_hold_ns) in dw_i2c_plat_probe()
354 dev->sda_hold_time = in dw_i2c_plat_probe()
358 adap = &dev->adapter; in dw_i2c_plat_probe()
362 ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev)); in dw_i2c_plat_probe()
363 adap->dev.of_node = pdev->dev.of_node; in dw_i2c_plat_probe()
366 if (dev->flags & ACCESS_NO_IRQ_SUSPEND) { in dw_i2c_plat_probe()
367 dev_pm_set_driver_flags(&pdev->dev, in dw_i2c_plat_probe()
370 dev_pm_set_driver_flags(&pdev->dev, in dw_i2c_plat_probe()
375 device_enable_async_suspend(&pdev->dev); in dw_i2c_plat_probe()
378 WARN_ON(pm_runtime_enabled(&pdev->dev)); in dw_i2c_plat_probe()
380 pm_runtime_set_autosuspend_delay(&pdev->dev, 1000); in dw_i2c_plat_probe()
381 pm_runtime_use_autosuspend(&pdev->dev); in dw_i2c_plat_probe()
382 pm_runtime_set_active(&pdev->dev); in dw_i2c_plat_probe()
384 if (dev->shared_with_punit) in dw_i2c_plat_probe()
385 pm_runtime_get_noresume(&pdev->dev); in dw_i2c_plat_probe()
387 pm_runtime_enable(&pdev->dev); in dw_i2c_plat_probe()
389 ret = i2c_dw_probe(dev); in dw_i2c_plat_probe()
396 dw_i2c_plat_pm_cleanup(dev); in dw_i2c_plat_probe()
398 reset_control_assert(dev->rst); in dw_i2c_plat_probe()
404 struct dw_i2c_dev *dev = platform_get_drvdata(pdev); in dw_i2c_plat_remove() local
406 pm_runtime_get_sync(&pdev->dev); in dw_i2c_plat_remove()
408 i2c_del_adapter(&dev->adapter); in dw_i2c_plat_remove()
410 dev->disable(dev); in dw_i2c_plat_remove()
412 pm_runtime_dont_use_autosuspend(&pdev->dev); in dw_i2c_plat_remove()
413 pm_runtime_put_sync(&pdev->dev); in dw_i2c_plat_remove()
414 dw_i2c_plat_pm_cleanup(dev); in dw_i2c_plat_remove()
416 i2c_dw_remove_lock_support(dev); in dw_i2c_plat_remove()
418 reset_control_assert(dev->rst); in dw_i2c_plat_remove()
421 static int dw_i2c_plat_prepare(struct device *dev) in dw_i2c_plat_prepare() argument
429 return !has_acpi_companion(dev); in dw_i2c_plat_prepare()
432 static int dw_i2c_plat_runtime_suspend(struct device *dev) in dw_i2c_plat_runtime_suspend() argument
434 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); in dw_i2c_plat_runtime_suspend()
445 static int dw_i2c_plat_suspend(struct device *dev) in dw_i2c_plat_suspend() argument
447 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); in dw_i2c_plat_suspend()
451 return dw_i2c_plat_runtime_suspend(dev); in dw_i2c_plat_suspend()
454 static int dw_i2c_plat_runtime_resume(struct device *dev) in dw_i2c_plat_runtime_resume() argument
456 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); in dw_i2c_plat_runtime_resume()
466 static int dw_i2c_plat_resume(struct device *dev) in dw_i2c_plat_resume() argument
468 struct dw_i2c_dev *i_dev = dev_get_drvdata(dev); in dw_i2c_plat_resume()
470 dw_i2c_plat_runtime_resume(dev); in dw_i2c_plat_resume()