2 * linux/drivers/mfd/ucb1x00-core.c
4 * Copyright (C) 2001 Russell King, All Rights Reserved.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License.
10 * The UCB1x00 core driver provides basic services for handling IO,
11 * the ADC, interrupts, and accessing registers. It is designed
12 * such that everything goes through this layer, thereby providing
13 * a consistent locking methodology, as well as allowing the drivers
14 * to be used on other non-MCP-enabled hardware platforms.
16 * Note that all locks are private to this file. Nothing else may
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <linux/slab.h>
22 #include <linux/init.h>
23 #include <linux/errno.h>
24 #include <linux/interrupt.h>
25 #include <linux/device.h>
26 #include <linux/mutex.h>
29 #include <asm/hardware.h>
33 static DEFINE_MUTEX(ucb1x00_mutex
);
34 static LIST_HEAD(ucb1x00_drivers
);
35 static LIST_HEAD(ucb1x00_devices
);
38 * ucb1x00_io_set_dir - set IO direction
39 * @ucb: UCB1x00 structure describing chip
40 * @in: bitfield of IO pins to be set as inputs
41 * @out: bitfield of IO pins to be set as outputs
43 * Set the IO direction of the ten general purpose IO pins on
44 * the UCB1x00 chip. The @in bitfield has priority over the
45 * @out bitfield, in that if you specify a pin as both input
46 * and output, it will end up as an input.
48 * ucb1x00_enable must have been called to enable the comms
49 * before using this function.
51 * This function takes a spinlock, disabling interrupts.
53 void ucb1x00_io_set_dir(struct ucb1x00
*ucb
, unsigned int in
, unsigned int out
)
57 spin_lock_irqsave(&ucb
->io_lock
, flags
);
61 ucb1x00_reg_write(ucb
, UCB_IO_DIR
, ucb
->io_dir
);
62 spin_unlock_irqrestore(&ucb
->io_lock
, flags
);
66 * ucb1x00_io_write - set or clear IO outputs
67 * @ucb: UCB1x00 structure describing chip
68 * @set: bitfield of IO pins to set to logic '1'
69 * @clear: bitfield of IO pins to set to logic '0'
71 * Set the IO output state of the specified IO pins. The value
72 * is retained if the pins are subsequently configured as inputs.
73 * The @clear bitfield has priority over the @set bitfield -
74 * outputs will be cleared.
76 * ucb1x00_enable must have been called to enable the comms
77 * before using this function.
79 * This function takes a spinlock, disabling interrupts.
81 void ucb1x00_io_write(struct ucb1x00
*ucb
, unsigned int set
, unsigned int clear
)
85 spin_lock_irqsave(&ucb
->io_lock
, flags
);
87 ucb
->io_out
&= ~clear
;
89 ucb1x00_reg_write(ucb
, UCB_IO_DATA
, ucb
->io_out
);
90 spin_unlock_irqrestore(&ucb
->io_lock
, flags
);
94 * ucb1x00_io_read - read the current state of the IO pins
95 * @ucb: UCB1x00 structure describing chip
97 * Return a bitfield describing the logic state of the ten
98 * general purpose IO pins.
100 * ucb1x00_enable must have been called to enable the comms
101 * before using this function.
103 * This function does not take any semaphores or spinlocks.
105 unsigned int ucb1x00_io_read(struct ucb1x00
*ucb
)
107 return ucb1x00_reg_read(ucb
, UCB_IO_DATA
);
111 * UCB1300 data sheet says we must:
112 * 1. enable ADC => 5us (including reference startup time)
113 * 2. select input => 51*tsibclk => 4.3us
114 * 3. start conversion => 102*tsibclk => 8.5us
115 * (tsibclk = 1/11981000)
116 * Period between SIB 128-bit frames = 10.7us
120 * ucb1x00_adc_enable - enable the ADC converter
121 * @ucb: UCB1x00 structure describing chip
123 * Enable the ucb1x00 and ADC converter on the UCB1x00 for use.
124 * Any code wishing to use the ADC converter must call this
125 * function prior to using it.
127 * This function takes the ADC semaphore to prevent two or more
128 * concurrent uses, and therefore may sleep. As a result, it
129 * can only be called from process context, not interrupt
132 * You should release the ADC as soon as possible using
133 * ucb1x00_adc_disable.
135 void ucb1x00_adc_enable(struct ucb1x00
*ucb
)
139 ucb
->adc_cr
|= UCB_ADC_ENA
;
142 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, ucb
->adc_cr
);
146 * ucb1x00_adc_read - read the specified ADC channel
147 * @ucb: UCB1x00 structure describing chip
148 * @adc_channel: ADC channel mask
149 * @sync: wait for syncronisation pulse.
151 * Start an ADC conversion and wait for the result. Note that
152 * synchronised ADC conversions (via the ADCSYNC pin) must wait
153 * until the trigger is asserted and the conversion is finished.
155 * This function currently spins waiting for the conversion to
156 * complete (2 frames max without sync).
158 * If called for a synchronised ADC conversion, it may sleep
159 * with the ADC semaphore held.
161 unsigned int ucb1x00_adc_read(struct ucb1x00
*ucb
, int adc_channel
, int sync
)
166 adc_channel
|= UCB_ADC_SYNC_ENA
;
168 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, ucb
->adc_cr
| adc_channel
);
169 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, ucb
->adc_cr
| adc_channel
| UCB_ADC_START
);
172 val
= ucb1x00_reg_read(ucb
, UCB_ADC_DATA
);
173 if (val
& UCB_ADC_DAT_VAL
)
175 /* yield to other processes */
176 set_current_state(TASK_INTERRUPTIBLE
);
180 return UCB_ADC_DAT(val
);
184 * ucb1x00_adc_disable - disable the ADC converter
185 * @ucb: UCB1x00 structure describing chip
187 * Disable the ADC converter and release the ADC semaphore.
189 void ucb1x00_adc_disable(struct ucb1x00
*ucb
)
191 ucb
->adc_cr
&= ~UCB_ADC_ENA
;
192 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, ucb
->adc_cr
);
193 ucb1x00_disable(ucb
);
199 * UCB1x00 Interrupt handling.
201 * The UCB1x00 can generate interrupts when the SIBCLK is stopped.
202 * Since we need to read an internal register, we must re-enable
203 * SIBCLK to talk to the chip. We leave the clock running until
204 * we have finished processing all interrupts from the chip.
206 static irqreturn_t
ucb1x00_irq(int irqnr
, void *devid
, struct pt_regs
*regs
)
208 struct ucb1x00
*ucb
= devid
;
209 struct ucb1x00_irq
*irq
;
213 isr
= ucb1x00_reg_read(ucb
, UCB_IE_STATUS
);
214 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, isr
);
215 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, 0);
217 for (i
= 0, irq
= ucb
->irq_handler
; i
< 16 && isr
; i
++, isr
>>= 1, irq
++)
218 if (isr
& 1 && irq
->fn
)
219 irq
->fn(i
, irq
->devid
);
220 ucb1x00_disable(ucb
);
226 * ucb1x00_hook_irq - hook a UCB1x00 interrupt
227 * @ucb: UCB1x00 structure describing chip
228 * @idx: interrupt index
229 * @fn: function to call when interrupt is triggered
230 * @devid: device id to pass to interrupt handler
232 * Hook the specified interrupt. You can only register one handler
233 * for each interrupt source. The interrupt source is not enabled
234 * by this function; use ucb1x00_enable_irq instead.
236 * Interrupt handlers will be called with other interrupts enabled.
238 * Returns zero on success, or one of the following errors:
239 * -EINVAL if the interrupt index is invalid
240 * -EBUSY if the interrupt has already been hooked
242 int ucb1x00_hook_irq(struct ucb1x00
*ucb
, unsigned int idx
, void (*fn
)(int, void *), void *devid
)
244 struct ucb1x00_irq
*irq
;
248 irq
= ucb
->irq_handler
+ idx
;
251 spin_lock_irq(&ucb
->lock
);
252 if (irq
->fn
== NULL
) {
257 spin_unlock_irq(&ucb
->lock
);
263 * ucb1x00_enable_irq - enable an UCB1x00 interrupt source
264 * @ucb: UCB1x00 structure describing chip
265 * @idx: interrupt index
266 * @edges: interrupt edges to enable
268 * Enable the specified interrupt to trigger on %UCB_RISING,
269 * %UCB_FALLING or both edges. The interrupt should have been
270 * hooked by ucb1x00_hook_irq.
272 void ucb1x00_enable_irq(struct ucb1x00
*ucb
, unsigned int idx
, int edges
)
277 spin_lock_irqsave(&ucb
->lock
, flags
);
280 if (edges
& UCB_RISING
) {
281 ucb
->irq_ris_enbl
|= 1 << idx
;
282 ucb1x00_reg_write(ucb
, UCB_IE_RIS
, ucb
->irq_ris_enbl
);
284 if (edges
& UCB_FALLING
) {
285 ucb
->irq_fal_enbl
|= 1 << idx
;
286 ucb1x00_reg_write(ucb
, UCB_IE_FAL
, ucb
->irq_fal_enbl
);
288 ucb1x00_disable(ucb
);
289 spin_unlock_irqrestore(&ucb
->lock
, flags
);
294 * ucb1x00_disable_irq - disable an UCB1x00 interrupt source
295 * @ucb: UCB1x00 structure describing chip
296 * @edges: interrupt edges to disable
298 * Disable the specified interrupt triggering on the specified
299 * (%UCB_RISING, %UCB_FALLING or both) edges.
301 void ucb1x00_disable_irq(struct ucb1x00
*ucb
, unsigned int idx
, int edges
)
306 spin_lock_irqsave(&ucb
->lock
, flags
);
309 if (edges
& UCB_RISING
) {
310 ucb
->irq_ris_enbl
&= ~(1 << idx
);
311 ucb1x00_reg_write(ucb
, UCB_IE_RIS
, ucb
->irq_ris_enbl
);
313 if (edges
& UCB_FALLING
) {
314 ucb
->irq_fal_enbl
&= ~(1 << idx
);
315 ucb1x00_reg_write(ucb
, UCB_IE_FAL
, ucb
->irq_fal_enbl
);
317 ucb1x00_disable(ucb
);
318 spin_unlock_irqrestore(&ucb
->lock
, flags
);
323 * ucb1x00_free_irq - disable and free the specified UCB1x00 interrupt
324 * @ucb: UCB1x00 structure describing chip
325 * @idx: interrupt index
328 * Disable the interrupt source and remove the handler. devid must
329 * match the devid passed when hooking the interrupt.
331 * Returns zero on success, or one of the following errors:
332 * -EINVAL if the interrupt index is invalid
333 * -ENOENT if devid does not match
335 int ucb1x00_free_irq(struct ucb1x00
*ucb
, unsigned int idx
, void *devid
)
337 struct ucb1x00_irq
*irq
;
343 irq
= ucb
->irq_handler
+ idx
;
346 spin_lock_irq(&ucb
->lock
);
347 if (irq
->devid
== devid
) {
348 ucb
->irq_ris_enbl
&= ~(1 << idx
);
349 ucb
->irq_fal_enbl
&= ~(1 << idx
);
352 ucb1x00_reg_write(ucb
, UCB_IE_RIS
, ucb
->irq_ris_enbl
);
353 ucb1x00_reg_write(ucb
, UCB_IE_FAL
, ucb
->irq_fal_enbl
);
354 ucb1x00_disable(ucb
);
360 spin_unlock_irq(&ucb
->lock
);
364 printk(KERN_ERR
"Freeing bad UCB1x00 irq %d\n", idx
);
368 static int ucb1x00_add_dev(struct ucb1x00
*ucb
, struct ucb1x00_driver
*drv
)
370 struct ucb1x00_dev
*dev
;
373 dev
= kmalloc(sizeof(struct ucb1x00_dev
), GFP_KERNEL
);
381 list_add(&dev
->dev_node
, &ucb
->devs
);
382 list_add(&dev
->drv_node
, &drv
->devs
);
390 static void ucb1x00_remove_dev(struct ucb1x00_dev
*dev
)
392 dev
->drv
->remove(dev
);
393 list_del(&dev
->dev_node
);
394 list_del(&dev
->drv_node
);
399 * Try to probe our interrupt, rather than relying on lots of
400 * hard-coded machine dependencies. For reference, the expected
403 * Machine Default IRQ
404 * adsbitsy IRQ_GPCIN4
405 * cerf IRQ_GPIO_UCB1200_IRQ
406 * flexanet IRQ_GPIO_GUI
407 * freebird IRQ_GPIO_FREEBIRD_UCB1300_IRQ
408 * graphicsclient ADS_EXT_IRQ(8)
409 * graphicsmaster ADS_EXT_IRQ(8)
410 * lart LART_IRQ_UCB1200
411 * omnimeter IRQ_GPIO23
412 * pfs168 IRQ_GPIO_UCB1300_IRQ
413 * simpad IRQ_GPIO_UCB1300_IRQ
414 * shannon SHANNON_IRQ_GPIO_IRQ_CODEC
415 * yopy IRQ_GPIO_UCB1200_IRQ
417 static int ucb1x00_detect_irq(struct ucb1x00
*ucb
)
421 mask
= probe_irq_on();
428 * Enable the ADC interrupt.
430 ucb1x00_reg_write(ucb
, UCB_IE_RIS
, UCB_IE_ADC
);
431 ucb1x00_reg_write(ucb
, UCB_IE_FAL
, UCB_IE_ADC
);
432 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, 0xffff);
433 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, 0);
436 * Cause an ADC interrupt.
438 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, UCB_ADC_ENA
);
439 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, UCB_ADC_ENA
| UCB_ADC_START
);
442 * Wait for the conversion to complete.
444 while ((ucb1x00_reg_read(ucb
, UCB_ADC_DATA
) & UCB_ADC_DAT_VAL
) == 0);
445 ucb1x00_reg_write(ucb
, UCB_ADC_CR
, 0);
448 * Disable and clear interrupt.
450 ucb1x00_reg_write(ucb
, UCB_IE_RIS
, 0);
451 ucb1x00_reg_write(ucb
, UCB_IE_FAL
, 0);
452 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, 0xffff);
453 ucb1x00_reg_write(ucb
, UCB_IE_CLEAR
, 0);
456 * Read triggered interrupt.
458 return probe_irq_off(mask
);
461 static void ucb1x00_release(struct class_device
*dev
)
463 struct ucb1x00
*ucb
= classdev_to_ucb1x00(dev
);
467 static struct class ucb1x00_class
= {
469 .release
= ucb1x00_release
,
472 static int ucb1x00_probe(struct mcp
*mcp
)
475 struct ucb1x00_driver
*drv
;
480 id
= mcp_reg_read(mcp
, UCB_ID
);
482 if (id
!= UCB_ID_1200
&& id
!= UCB_ID_1300
&& id
!= UCB_ID_TC35143
) {
483 printk(KERN_WARNING
"UCB1x00 ID not found: %04x\n", id
);
487 ucb
= kmalloc(sizeof(struct ucb1x00
), GFP_KERNEL
);
492 memset(ucb
, 0, sizeof(struct ucb1x00
));
494 ucb
->cdev
.class = &ucb1x00_class
;
495 ucb
->cdev
.dev
= &mcp
->attached_device
;
496 strlcpy(ucb
->cdev
.class_id
, "ucb1x00", sizeof(ucb
->cdev
.class_id
));
498 spin_lock_init(&ucb
->lock
);
499 spin_lock_init(&ucb
->io_lock
);
500 sema_init(&ucb
->adc_sem
, 1);
504 ucb
->irq
= ucb1x00_detect_irq(ucb
);
505 if (ucb
->irq
== NO_IRQ
) {
506 printk(KERN_ERR
"UCB1x00: IRQ probe failed\n");
511 ret
= request_irq(ucb
->irq
, ucb1x00_irq
, IRQF_TRIGGER_RISING
,
514 printk(KERN_ERR
"ucb1x00: unable to grab irq%d: %d\n",
519 mcp_set_drvdata(mcp
, ucb
);
521 ret
= class_device_register(&ucb
->cdev
);
525 INIT_LIST_HEAD(&ucb
->devs
);
526 mutex_lock(&ucb1x00_mutex
);
527 list_add(&ucb
->node
, &ucb1x00_devices
);
528 list_for_each_entry(drv
, &ucb1x00_drivers
, node
) {
529 ucb1x00_add_dev(ucb
, drv
);
531 mutex_unlock(&ucb1x00_mutex
);
535 free_irq(ucb
->irq
, ucb
);
544 static void ucb1x00_remove(struct mcp
*mcp
)
546 struct ucb1x00
*ucb
= mcp_get_drvdata(mcp
);
547 struct list_head
*l
, *n
;
549 mutex_lock(&ucb1x00_mutex
);
550 list_del(&ucb
->node
);
551 list_for_each_safe(l
, n
, &ucb
->devs
) {
552 struct ucb1x00_dev
*dev
= list_entry(l
, struct ucb1x00_dev
, dev_node
);
553 ucb1x00_remove_dev(dev
);
555 mutex_unlock(&ucb1x00_mutex
);
557 free_irq(ucb
->irq
, ucb
);
558 class_device_unregister(&ucb
->cdev
);
561 int ucb1x00_register_driver(struct ucb1x00_driver
*drv
)
565 INIT_LIST_HEAD(&drv
->devs
);
566 mutex_lock(&ucb1x00_mutex
);
567 list_add(&drv
->node
, &ucb1x00_drivers
);
568 list_for_each_entry(ucb
, &ucb1x00_devices
, node
) {
569 ucb1x00_add_dev(ucb
, drv
);
571 mutex_unlock(&ucb1x00_mutex
);
575 void ucb1x00_unregister_driver(struct ucb1x00_driver
*drv
)
577 struct list_head
*n
, *l
;
579 mutex_lock(&ucb1x00_mutex
);
580 list_del(&drv
->node
);
581 list_for_each_safe(l
, n
, &drv
->devs
) {
582 struct ucb1x00_dev
*dev
= list_entry(l
, struct ucb1x00_dev
, drv_node
);
583 ucb1x00_remove_dev(dev
);
585 mutex_unlock(&ucb1x00_mutex
);
588 static int ucb1x00_suspend(struct mcp
*mcp
, pm_message_t state
)
590 struct ucb1x00
*ucb
= mcp_get_drvdata(mcp
);
591 struct ucb1x00_dev
*dev
;
593 mutex_lock(&ucb1x00_mutex
);
594 list_for_each_entry(dev
, &ucb
->devs
, dev_node
) {
595 if (dev
->drv
->suspend
)
596 dev
->drv
->suspend(dev
, state
);
598 mutex_unlock(&ucb1x00_mutex
);
602 static int ucb1x00_resume(struct mcp
*mcp
)
604 struct ucb1x00
*ucb
= mcp_get_drvdata(mcp
);
605 struct ucb1x00_dev
*dev
;
607 mutex_lock(&ucb1x00_mutex
);
608 list_for_each_entry(dev
, &ucb
->devs
, dev_node
) {
609 if (dev
->drv
->resume
)
610 dev
->drv
->resume(dev
);
612 mutex_unlock(&ucb1x00_mutex
);
616 static struct mcp_driver ucb1x00_driver
= {
620 .probe
= ucb1x00_probe
,
621 .remove
= ucb1x00_remove
,
622 .suspend
= ucb1x00_suspend
,
623 .resume
= ucb1x00_resume
,
626 static int __init
ucb1x00_init(void)
628 int ret
= class_register(&ucb1x00_class
);
630 ret
= mcp_driver_register(&ucb1x00_driver
);
632 class_unregister(&ucb1x00_class
);
637 static void __exit
ucb1x00_exit(void)
639 mcp_driver_unregister(&ucb1x00_driver
);
640 class_unregister(&ucb1x00_class
);
643 module_init(ucb1x00_init
);
644 module_exit(ucb1x00_exit
);
646 EXPORT_SYMBOL(ucb1x00_io_set_dir
);
647 EXPORT_SYMBOL(ucb1x00_io_write
);
648 EXPORT_SYMBOL(ucb1x00_io_read
);
650 EXPORT_SYMBOL(ucb1x00_adc_enable
);
651 EXPORT_SYMBOL(ucb1x00_adc_read
);
652 EXPORT_SYMBOL(ucb1x00_adc_disable
);
654 EXPORT_SYMBOL(ucb1x00_hook_irq
);
655 EXPORT_SYMBOL(ucb1x00_free_irq
);
656 EXPORT_SYMBOL(ucb1x00_enable_irq
);
657 EXPORT_SYMBOL(ucb1x00_disable_irq
);
659 EXPORT_SYMBOL(ucb1x00_register_driver
);
660 EXPORT_SYMBOL(ucb1x00_unregister_driver
);
662 MODULE_AUTHOR("Russell King <rmk@arm.linux.org.uk>");
663 MODULE_DESCRIPTION("UCB1x00 core driver");
664 MODULE_LICENSE("GPL");