Lines Matching +full:designware +full:- +full:i2c
1 // SPDX-License-Identifier: GPL-2.0+
3 * Based on Synopsys DesignWare I2C adapter driver.
13 #include "i2c-designware-core.h"
20 pm_runtime_disable(i2c_dev->dev); in amd_isp_dw_i2c_plat_pm_cleanup()
22 if (i2c_dev->shared_with_punit) in amd_isp_dw_i2c_plat_pm_cleanup()
23 pm_runtime_put_noidle(i2c_dev->dev); in amd_isp_dw_i2c_plat_pm_cleanup()
37 isp_i2c_dev = devm_kzalloc(&pdev->dev, sizeof(*isp_i2c_dev), GFP_KERNEL); in amd_isp_dw_i2c_plat_probe()
39 return -ENOMEM; in amd_isp_dw_i2c_plat_probe()
40 isp_i2c_dev->dev = &pdev->dev; in amd_isp_dw_i2c_plat_probe()
42 pdev->dev.init_name = DRV_NAME; in amd_isp_dw_i2c_plat_probe()
46 * no IRQ connection from ISP I2C in amd_isp_dw_i2c_plat_probe()
48 isp_i2c_dev->flags |= ACCESS_POLLING; in amd_isp_dw_i2c_plat_probe()
51 isp_i2c_dev->base = devm_platform_ioremap_resource(pdev, 0); in amd_isp_dw_i2c_plat_probe()
52 if (IS_ERR(isp_i2c_dev->base)) in amd_isp_dw_i2c_plat_probe()
53 return dev_err_probe(&pdev->dev, PTR_ERR(isp_i2c_dev->base), in amd_isp_dw_i2c_plat_probe()
56 isp_i2c_dev->get_clk_rate_khz = amd_isp_dw_i2c_get_clk_rate; in amd_isp_dw_i2c_plat_probe()
59 return dev_err_probe(&pdev->dev, ret, in amd_isp_dw_i2c_plat_probe()
60 "failed to parse i2c dw fwnode and configure\n"); in amd_isp_dw_i2c_plat_probe()
64 adap = &isp_i2c_dev->adapter; in amd_isp_dw_i2c_plat_probe()
65 adap->owner = THIS_MODULE; in amd_isp_dw_i2c_plat_probe()
66 scnprintf(adap->name, sizeof(adap->name), AMDISP_I2C_ADAP_NAME); in amd_isp_dw_i2c_plat_probe()
67 ACPI_COMPANION_SET(&adap->dev, ACPI_COMPANION(&pdev->dev)); in amd_isp_dw_i2c_plat_probe()
68 adap->dev.of_node = pdev->dev.of_node; in amd_isp_dw_i2c_plat_probe()
70 adap->nr = -1; in amd_isp_dw_i2c_plat_probe()
72 if (isp_i2c_dev->flags & ACCESS_NO_IRQ_SUSPEND) in amd_isp_dw_i2c_plat_probe()
73 dev_pm_set_driver_flags(&pdev->dev, in amd_isp_dw_i2c_plat_probe()
76 dev_pm_set_driver_flags(&pdev->dev, in amd_isp_dw_i2c_plat_probe()
80 device_enable_async_suspend(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
82 if (isp_i2c_dev->shared_with_punit) in amd_isp_dw_i2c_plat_probe()
83 pm_runtime_get_noresume(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
85 pm_runtime_enable(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
86 pm_runtime_get_sync(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
90 dev_err_probe(&pdev->dev, ret, "i2c_dw_probe failed\n"); in amd_isp_dw_i2c_plat_probe()
94 pm_runtime_put_sync(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
100 pm_runtime_put_sync(&pdev->dev); in amd_isp_dw_i2c_plat_probe()
108 pm_runtime_get_sync(&pdev->dev); in amd_isp_dw_i2c_plat_remove()
110 i2c_del_adapter(&isp_i2c_dev->adapter); in amd_isp_dw_i2c_plat_remove()
114 pm_runtime_put_sync(&pdev->dev); in amd_isp_dw_i2c_plat_remove()
122 * may be accessed during suspend and resume of other devices via I2C in amd_isp_dw_i2c_plat_prepare()
133 if (i_dev->shared_with_punit) in amd_isp_dw_i2c_plat_runtime_suspend()
148 return -ENODEV; in amd_isp_dw_i2c_plat_suspend()
152 i2c_mark_adapter_suspended(&i_dev->adapter); in amd_isp_dw_i2c_plat_suspend()
162 return -ENODEV; in amd_isp_dw_i2c_plat_runtime_resume()
164 if (!i_dev->shared_with_punit) in amd_isp_dw_i2c_plat_runtime_resume()
166 if (i_dev->init) in amd_isp_dw_i2c_plat_runtime_resume()
167 i_dev->init(i_dev); in amd_isp_dw_i2c_plat_runtime_resume()
177 i2c_mark_adapter_resumed(&i_dev->adapter); in amd_isp_dw_i2c_plat_resume()
201 MODULE_DESCRIPTION("Synopsys DesignWare I2C bus adapter in AMD ISP");