Lines Matching full:i2c

4  *  Platform driver for the PCA9564 I2C controller.
20 #include <linux/i2c.h>
23 #include <linux/i2c-algo-pca.h>
24 #include <linux/i2c-pca-platform.h>
45 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_readbyte8() local
46 return ioread8(i2c->reg_base + reg); in i2c_pca_pf_readbyte8()
51 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_readbyte16() local
52 return ioread8(i2c->reg_base + reg * 2); in i2c_pca_pf_readbyte16()
57 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_readbyte32() local
58 return ioread8(i2c->reg_base + reg * 4); in i2c_pca_pf_readbyte32()
63 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_writebyte8() local
64 iowrite8(val, i2c->reg_base + reg); in i2c_pca_pf_writebyte8()
69 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_writebyte16() local
70 iowrite8(val, i2c->reg_base + reg * 2); in i2c_pca_pf_writebyte16()
75 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_writebyte32() local
76 iowrite8(val, i2c->reg_base + reg * 4); in i2c_pca_pf_writebyte32()
82 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_waitforcompletion() local
86 if (i2c->irq) { in i2c_pca_pf_waitforcompletion()
87 ret = wait_event_timeout(i2c->wait, in i2c_pca_pf_waitforcompletion()
88 i2c->algo_data.read_byte(i2c, I2C_PCA_CON) in i2c_pca_pf_waitforcompletion()
89 & I2C_PCA_CON_SI, i2c->adap.timeout); in i2c_pca_pf_waitforcompletion()
92 timeout = jiffies + i2c->adap.timeout; in i2c_pca_pf_waitforcompletion()
95 if (i2c->algo_data.read_byte(i2c, I2C_PCA_CON) in i2c_pca_pf_waitforcompletion()
107 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_dummyreset() local
109 i2c->adap.name); in i2c_pca_pf_dummyreset()
114 struct i2c_pca_pf_data *i2c = pd; in i2c_pca_pf_resetchip() local
116 gpio_set_value(i2c->gpio, 0); in i2c_pca_pf_resetchip()
118 gpio_set_value(i2c->gpio, 1); in i2c_pca_pf_resetchip()
123 struct i2c_pca_pf_data *i2c = dev_id; in i2c_pca_pf_handler() local
125 if ((i2c->algo_data.read_byte(i2c, I2C_PCA_CON) & I2C_PCA_CON_SI) == 0) in i2c_pca_pf_handler()
128 wake_up(&i2c->wait); in i2c_pca_pf_handler()
136 struct i2c_pca_pf_data *i2c; in i2c_pca_pf_probe() local
157 i2c = kzalloc(sizeof(struct i2c_pca_pf_data), GFP_KERNEL); in i2c_pca_pf_probe()
158 if (!i2c) { in i2c_pca_pf_probe()
163 init_waitqueue_head(&i2c->wait); in i2c_pca_pf_probe()
165 i2c->reg_base = ioremap(res->start, resource_size(res)); in i2c_pca_pf_probe()
166 if (!i2c->reg_base) { in i2c_pca_pf_probe()
170 i2c->io_base = res->start; in i2c_pca_pf_probe()
171 i2c->io_size = resource_size(res); in i2c_pca_pf_probe()
172 i2c->irq = irq; in i2c_pca_pf_probe()
174 i2c->adap.nr = pdev->id >= 0 ? pdev->id : 0; in i2c_pca_pf_probe()
175 i2c->adap.owner = THIS_MODULE; in i2c_pca_pf_probe()
176 snprintf(i2c->adap.name, sizeof(i2c->adap.name), in i2c_pca_pf_probe()
179 i2c->adap.algo_data = &i2c->algo_data; in i2c_pca_pf_probe()
180 i2c->adap.dev.parent = &pdev->dev; in i2c_pca_pf_probe()
183 i2c->adap.timeout = platform_data->timeout; in i2c_pca_pf_probe()
184 i2c->algo_data.i2c_clock = platform_data->i2c_clock_speed; in i2c_pca_pf_probe()
185 i2c->gpio = platform_data->gpio; in i2c_pca_pf_probe()
187 i2c->adap.timeout = HZ; in i2c_pca_pf_probe()
188 i2c->algo_data.i2c_clock = 59000; in i2c_pca_pf_probe()
189 i2c->gpio = -1; in i2c_pca_pf_probe()
192 i2c->algo_data.data = i2c; in i2c_pca_pf_probe()
193 i2c->algo_data.wait_for_completion = i2c_pca_pf_waitforcompletion; in i2c_pca_pf_probe()
194 i2c->algo_data.reset_chip = i2c_pca_pf_dummyreset; in i2c_pca_pf_probe()
198 i2c->algo_data.write_byte = i2c_pca_pf_writebyte32; in i2c_pca_pf_probe()
199 i2c->algo_data.read_byte = i2c_pca_pf_readbyte32; in i2c_pca_pf_probe()
202 i2c->algo_data.write_byte = i2c_pca_pf_writebyte16; in i2c_pca_pf_probe()
203 i2c->algo_data.read_byte = i2c_pca_pf_readbyte16; in i2c_pca_pf_probe()
207 i2c->algo_data.write_byte = i2c_pca_pf_writebyte8; in i2c_pca_pf_probe()
208 i2c->algo_data.read_byte = i2c_pca_pf_readbyte8; in i2c_pca_pf_probe()
213 if (i2c->gpio > -1) { in i2c_pca_pf_probe()
214 ret = gpio_request(i2c->gpio, i2c->adap.name); in i2c_pca_pf_probe()
216 gpio_direction_output(i2c->gpio, 1); in i2c_pca_pf_probe()
217 i2c->algo_data.reset_chip = i2c_pca_pf_resetchip; in i2c_pca_pf_probe()
220 i2c->adap.name); in i2c_pca_pf_probe()
221 i2c->gpio = ret; in i2c_pca_pf_probe()
227 IRQF_TRIGGER_FALLING, pdev->name, i2c); in i2c_pca_pf_probe()
232 if (i2c_pca_add_numbered_bus(&i2c->adap) < 0) { in i2c_pca_pf_probe()
237 platform_set_drvdata(pdev, i2c); in i2c_pca_pf_probe()
239 printk(KERN_INFO "%s registered.\n", i2c->adap.name); in i2c_pca_pf_probe()
245 free_irq(irq, i2c); in i2c_pca_pf_probe()
247 if (i2c->gpio > -1) in i2c_pca_pf_probe()
248 gpio_free(i2c->gpio); in i2c_pca_pf_probe()
250 iounmap(i2c->reg_base); in i2c_pca_pf_probe()
252 kfree(i2c); in i2c_pca_pf_probe()
262 struct i2c_pca_pf_data *i2c = platform_get_drvdata(pdev); in i2c_pca_pf_remove() local
265 i2c_del_adapter(&i2c->adap); in i2c_pca_pf_remove()
267 if (i2c->irq) in i2c_pca_pf_remove()
268 free_irq(i2c->irq, i2c); in i2c_pca_pf_remove()
270 if (i2c->gpio > -1) in i2c_pca_pf_remove()
271 gpio_free(i2c->gpio); in i2c_pca_pf_remove()
273 iounmap(i2c->reg_base); in i2c_pca_pf_remove()
274 release_mem_region(i2c->io_base, i2c->io_size); in i2c_pca_pf_remove()
275 kfree(i2c); in i2c_pca_pf_remove()
284 .name = "i2c-pca-platform",
292 MODULE_DESCRIPTION("I2C-PCA9564/PCA9665 platform driver");