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