13 #include <linux/module.h>
14 #include <linux/kernel.h>
16 #include <linux/slab.h>
17 #include <linux/types.h>
19 #include <linux/i2c.h>
24 #include <mach/hardware.h>
30 static short poll_status(
unsigned long bit)
48 return (loop_cntr > 0);
57 if (!poll_status(I2C_STATUS_TFNF)) {
58 dev_dbg(&adap->
dev,
"Tx FIFO Not Full timeout\n");
85 static int xfer_write(
struct i2c_adapter *adap,
unsigned char *buf,
int length)
139 dev_dbg(&adap->
dev,
"puv3_i2c_xfer: processing %d messages:\n", num);
141 for (i = 0; i < num; i++) {
142 dev_dbg(&adap->
dev,
" #%d: %sing %d byte%s %s 0x%02x\n", i,
144 pmsg->
len, pmsg->
len > 1 ?
"s" :
"",
147 if (pmsg->
len && pmsg->
buf) {
149 ret = xfer_read(adap, pmsg->
buf, pmsg->
len);
151 ret = xfer_write(adap, pmsg->
buf, pmsg->
len);
164 pmsg->
buf[0] = pmsg->
buf[1];
180 .master_xfer = puv3_i2c_xfer,
181 .functionality = puv3_i2c_func,
201 if (adapter ==
NULL) {
202 dev_err(&pdev->
dev,
"can't allocate inteface!\n");
208 adapter->
algo = &puv3_i2c_algorithm;
210 adapter->
dev.parent = &pdev->
dev;
212 platform_set_drvdata(pdev, adapter);
214 adapter->
nr = pdev->
id;
217 dev_err(&pdev->
dev,
"Adapter '%s' registration failed\n",
219 goto fail_add_adapter;
222 dev_info(&pdev->
dev,
"PKUnity v3 i2c bus adapter.\n");
226 platform_set_drvdata(pdev,
NULL);
236 struct i2c_adapter *adapter = platform_get_drvdata(pdev);
242 dev_err(&pdev->
dev,
"Adapter '%s' delete fail\n",
248 platform_set_drvdata(pdev,
NULL);
257 static int puv3_i2c_suspend(
struct device *
dev)
262 for (poll_count = 0; poll_count < 50; poll_count++) {
271 #define PUV3_I2C_PM (&puv3_i2c_pm)
274 #define PUV3_I2C_PM NULL
278 .probe = puv3_i2c_probe,
281 .name =
"PKUnity-v3-I2C",