28 #include <linux/kernel.h>
29 #include <linux/module.h>
31 #include <linux/i2c.h>
33 #include <linux/errno.h>
34 #include <linux/sched.h>
41 #include <linux/slab.h>
76 dev_err(&pdev->
dev,
"I2C region already claimed\n");
83 goto err_release_region;
90 platform_set_drvdata(pdev, dev);
95 if (IS_ERR(dev->
clk)) {
99 clk_prepare_enable(dev->
clk);
113 dev_err(&pdev->
dev,
"failure mapping io resources\n");
115 goto err_unuse_clocks;
130 dev_err(&pdev->
dev,
"failure requesting irq %i\n", dev->
irq);
135 i2c_set_adapdata(adap, dev);
138 strlcpy(adap->
name,
"Synopsys DesignWare I2C adapter",
140 adap->
algo = &i2c_dw_algo;
141 adap->
dev.parent = &pdev->
dev;
142 adap->
dev.of_node = pdev->
dev.of_node;
147 dev_err(&pdev->
dev,
"failure adding adapter\n");
159 clk_disable_unprepare(dev->
clk);
163 platform_set_drvdata(pdev,
NULL);
174 struct dw_i2c_dev *dev = platform_get_drvdata(pdev);
177 platform_set_drvdata(pdev,
NULL);
181 clk_disable_unprepare(dev->
clk);
203 static int dw_i2c_suspend(
struct device *dev)
206 struct dw_i2c_dev *i_dev = platform_get_drvdata(pdev);
208 clk_disable_unprepare(i_dev->
clk);
213 static int dw_i2c_resume(
struct device *dev)
216 struct dw_i2c_dev *i_dev = platform_get_drvdata(pdev);
218 clk_prepare_enable(i_dev->
clk);
233 .name =
"i2c_designware",
236 .pm = &dw_i2c_dev_pm_ops,
240 static int __init dw_i2c_init_driver(
void)
246 static void __exit dw_i2c_exit_driver(
void)