Lines Matching full:bp

55 static void set_device_claimage(struct bbc_i2c_bus *bp, struct platform_device *op, int val)  in set_device_claimage()  argument
60 if (bp->devs[i].device == op) { in set_device_claimage()
61 bp->devs[i].client_claimed = val; in set_device_claimage()
67 #define claim_device(BP,ECHILD) set_device_claimage(BP,ECHILD,1) argument
68 #define release_device(BP,ECHILD) set_device_claimage(BP,ECHILD,0) argument
70 struct platform_device *bbc_i2c_getdev(struct bbc_i2c_bus *bp, int index) in bbc_i2c_getdev() argument
76 if (!(op = bp->devs[i].device)) in bbc_i2c_getdev()
90 struct bbc_i2c_client *bbc_i2c_attach(struct bbc_i2c_bus *bp, struct platform_device *op) in bbc_i2c_attach() argument
98 client->bp = bp; in bbc_i2c_attach()
110 claim_device(bp, op); in bbc_i2c_attach()
117 struct bbc_i2c_bus *bp = client->bp; in bbc_i2c_detach() local
120 release_device(bp, op); in bbc_i2c_detach()
124 static int wait_for_pin(struct bbc_i2c_bus *bp, u8 *status) in wait_for_pin() argument
130 bp->waiting = 1; in wait_for_pin()
131 add_wait_queue(&bp->wq, &wait); in wait_for_pin()
136 bp->wq, in wait_for_pin()
137 (((*status = readb(bp->i2c_control_regs + 0)) in wait_for_pin()
145 remove_wait_queue(&bp->wq, &wait); in wait_for_pin()
146 bp->waiting = 0; in wait_for_pin()
153 struct bbc_i2c_bus *bp = client->bp; in bbc_i2c_writeb() local
158 if (bp->i2c_bussel_reg != NULL) in bbc_i2c_writeb()
159 writeb(client->bus, bp->i2c_bussel_reg); in bbc_i2c_writeb()
161 writeb(address, bp->i2c_control_regs + 0x1); in bbc_i2c_writeb()
162 writeb(I2C_PCF_START, bp->i2c_control_regs + 0x0); in bbc_i2c_writeb()
163 if (wait_for_pin(bp, &status)) in bbc_i2c_writeb()
166 writeb(off, bp->i2c_control_regs + 0x1); in bbc_i2c_writeb()
167 if (wait_for_pin(bp, &status) || in bbc_i2c_writeb()
171 writeb(val, bp->i2c_control_regs + 0x1); in bbc_i2c_writeb()
172 if (wait_for_pin(bp, &status)) in bbc_i2c_writeb()
178 writeb(I2C_PCF_STOP, bp->i2c_control_regs + 0x0); in bbc_i2c_writeb()
184 struct bbc_i2c_bus *bp = client->bp; in bbc_i2c_readb() local
188 if (bp->i2c_bussel_reg != NULL) in bbc_i2c_readb()
189 writeb(client->bus, bp->i2c_bussel_reg); in bbc_i2c_readb()
191 writeb(address, bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
192 writeb(I2C_PCF_START, bp->i2c_control_regs + 0x0); in bbc_i2c_readb()
193 if (wait_for_pin(bp, &status)) in bbc_i2c_readb()
196 writeb(off, bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
197 if (wait_for_pin(bp, &status) || in bbc_i2c_readb()
201 writeb(I2C_PCF_STOP, bp->i2c_control_regs + 0x0); in bbc_i2c_readb()
205 writeb(address, bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
206 writeb(I2C_PCF_START, bp->i2c_control_regs + 0x0); in bbc_i2c_readb()
207 if (wait_for_pin(bp, &status)) in bbc_i2c_readb()
213 (void) readb(bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
214 if (wait_for_pin(bp, &status)) in bbc_i2c_readb()
217 writeb(I2C_PCF_ESO | I2C_PCF_ENI, bp->i2c_control_regs + 0x0); in bbc_i2c_readb()
218 *byte = readb(bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
219 if (wait_for_pin(bp, &status)) in bbc_i2c_readb()
225 writeb(I2C_PCF_STOP, bp->i2c_control_regs + 0x0); in bbc_i2c_readb()
226 (void) readb(bp->i2c_control_regs + 0x1); in bbc_i2c_readb()
274 struct bbc_i2c_bus *bp = dev_id; in bbc_i2c_interrupt() local
279 if (bp->waiting && in bbc_i2c_interrupt()
280 !(readb(bp->i2c_control_regs + 0x0) & I2C_PCF_PIN)) in bbc_i2c_interrupt()
281 wake_up_interruptible(&bp->wq); in bbc_i2c_interrupt()
286 static void reset_one_i2c(struct bbc_i2c_bus *bp) in reset_one_i2c() argument
288 writeb(I2C_PCF_PIN, bp->i2c_control_regs + 0x0); in reset_one_i2c()
289 writeb(bp->own, bp->i2c_control_regs + 0x1); in reset_one_i2c()
290 writeb(I2C_PCF_PIN | I2C_PCF_ES1, bp->i2c_control_regs + 0x0); in reset_one_i2c()
291 writeb(bp->clock, bp->i2c_control_regs + 0x1); in reset_one_i2c()
292 writeb(I2C_PCF_IDLE, bp->i2c_control_regs + 0x0); in reset_one_i2c()
297 struct bbc_i2c_bus *bp; in attach_one_i2c() local
301 bp = kzalloc(sizeof(*bp), GFP_KERNEL); in attach_one_i2c()
302 if (!bp) in attach_one_i2c()
305 INIT_LIST_HEAD(&bp->temps); in attach_one_i2c()
306 INIT_LIST_HEAD(&bp->fans); in attach_one_i2c()
308 bp->i2c_control_regs = of_ioremap(&op->resource[0], 0, 0x2, "bbc_i2c_regs"); in attach_one_i2c()
309 if (!bp->i2c_control_regs) in attach_one_i2c()
313 bp->i2c_bussel_reg = of_ioremap(&op->resource[1], 0, 0x1, "bbc_i2c_bussel"); in attach_one_i2c()
314 if (!bp->i2c_bussel_reg) in attach_one_i2c()
318 bp->waiting = 0; in attach_one_i2c()
319 init_waitqueue_head(&bp->wq); in attach_one_i2c()
321 IRQF_SHARED, "bbc_i2c", bp)) in attach_one_i2c()
324 bp->index = index; in attach_one_i2c()
325 bp->op = op; in attach_one_i2c()
327 spin_lock_init(&bp->lock); in attach_one_i2c()
336 bp->devs[entry].device = child_op; in attach_one_i2c()
337 bp->devs[entry].client_claimed = 0; in attach_one_i2c()
340 writeb(I2C_PCF_PIN, bp->i2c_control_regs + 0x0); in attach_one_i2c()
341 bp->own = readb(bp->i2c_control_regs + 0x01); in attach_one_i2c()
342 writeb(I2C_PCF_PIN | I2C_PCF_ES1, bp->i2c_control_regs + 0x0); in attach_one_i2c()
343 bp->clock = readb(bp->i2c_control_regs + 0x01); in attach_one_i2c()
346 bp->index, bp->i2c_control_regs, entry, bp->own, bp->clock); in attach_one_i2c()
348 reset_one_i2c(bp); in attach_one_i2c()
350 return bp; in attach_one_i2c()
353 if (bp->i2c_bussel_reg) in attach_one_i2c()
354 of_iounmap(&op->resource[1], bp->i2c_bussel_reg, 1); in attach_one_i2c()
355 if (bp->i2c_control_regs) in attach_one_i2c()
356 of_iounmap(&op->resource[0], bp->i2c_control_regs, 2); in attach_one_i2c()
357 kfree(bp); in attach_one_i2c()
363 struct bbc_i2c_bus *bp; in bbc_i2c_probe() local
366 bp = attach_one_i2c(op, index); in bbc_i2c_probe()
367 if (!bp) in bbc_i2c_probe()
370 err = bbc_envctrl_init(bp); in bbc_i2c_probe()
372 free_irq(op->archdata.irqs[0], bp); in bbc_i2c_probe()
373 if (bp->i2c_bussel_reg) in bbc_i2c_probe()
374 of_iounmap(&op->resource[0], bp->i2c_bussel_reg, 1); in bbc_i2c_probe()
375 if (bp->i2c_control_regs) in bbc_i2c_probe()
376 of_iounmap(&op->resource[1], bp->i2c_control_regs, 2); in bbc_i2c_probe()
377 kfree(bp); in bbc_i2c_probe()
379 dev_set_drvdata(&op->dev, bp); in bbc_i2c_probe()
387 struct bbc_i2c_bus *bp = dev_get_drvdata(&op->dev); in bbc_i2c_remove() local
389 bbc_envctrl_cleanup(bp); in bbc_i2c_remove()
391 free_irq(op->archdata.irqs[0], bp); in bbc_i2c_remove()
393 if (bp->i2c_bussel_reg) in bbc_i2c_remove()
394 of_iounmap(&op->resource[0], bp->i2c_bussel_reg, 1); in bbc_i2c_remove()
395 if (bp->i2c_control_regs) in bbc_i2c_remove()
396 of_iounmap(&op->resource[1], bp->i2c_control_regs, 2); in bbc_i2c_remove()
398 kfree(bp); in bbc_i2c_remove()