diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2014-09-09 11:03:17 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2014-09-09 11:03:17 -0400 |
| commit | c40c4028f048a077a8950fd95e5d8901f773a63f (patch) | |
| tree | 4d1abd711def0811b3c2af8e3c89322235bb9e10 /include/linux | |
| parent | 32dc5ca0c10c859e0e4fcc457e7c0a0c2c4b15ae (diff) | |
| parent | d07a1ecdfb96b26dd665b54fee22fc7417b1cb08 (diff) | |
Merge tag 'at91-cleanup2' of git://github.com/at91linux/linux-at91 into next/cleanup
Pull "Second batch of AT91 cleanup for 3.18" from Nicolas Ferre:
- Timer Counter (TC) fixup and cleanup:
- fix segmentation fault when kexec-ing a kernel by masking
TC interrupts at shutdown and probe time
- use modern driver model: devm_*, probe function, sanitize IRQ request
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
* tag 'at91-cleanup2' of git://github.com/at91linux/linux-at91:
clocksource: tcb_clksrc: sanitize IRQ request
ARM: at91/tclib: mask interruptions at shutdown and probe
ARM: at91/tclib: move initialization from alloc to probe
ARM: at91/tclib: prefer using of devm_* functions
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/atmel_tc.h | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/include/linux/atmel_tc.h b/include/linux/atmel_tc.h index 89a931babecf..b87c1c7c242a 100644 --- a/include/linux/atmel_tc.h +++ b/include/linux/atmel_tc.h | |||
| @@ -44,12 +44,13 @@ struct atmel_tcb_config { | |||
| 44 | /** | 44 | /** |
| 45 | * struct atmel_tc - information about a Timer/Counter Block | 45 | * struct atmel_tc - information about a Timer/Counter Block |
| 46 | * @pdev: physical device | 46 | * @pdev: physical device |
| 47 | * @iomem: resource associated with the I/O register | ||
| 48 | * @regs: mapping through which the I/O registers can be accessed | 47 | * @regs: mapping through which the I/O registers can be accessed |
| 48 | * @id: block id | ||
| 49 | * @tcb_config: configuration data from SoC | 49 | * @tcb_config: configuration data from SoC |
| 50 | * @irq: irq for each of the three channels | 50 | * @irq: irq for each of the three channels |
| 51 | * @clk: internal clock source for each of the three channels | 51 | * @clk: internal clock source for each of the three channels |
| 52 | * @node: list node, for tclib internal use | 52 | * @node: list node, for tclib internal use |
| 53 | * @allocated: if already used, for tclib internal use | ||
| 53 | * | 54 | * |
| 54 | * On some platforms, each TC channel has its own clocks and IRQs, | 55 | * On some platforms, each TC channel has its own clocks and IRQs, |
| 55 | * while on others, all TC channels share the same clock and IRQ. | 56 | * while on others, all TC channels share the same clock and IRQ. |
| @@ -61,15 +62,16 @@ struct atmel_tcb_config { | |||
| 61 | */ | 62 | */ |
| 62 | struct atmel_tc { | 63 | struct atmel_tc { |
| 63 | struct platform_device *pdev; | 64 | struct platform_device *pdev; |
| 64 | struct resource *iomem; | ||
| 65 | void __iomem *regs; | 65 | void __iomem *regs; |
| 66 | int id; | ||
| 66 | const struct atmel_tcb_config *tcb_config; | 67 | const struct atmel_tcb_config *tcb_config; |
| 67 | int irq[3]; | 68 | int irq[3]; |
| 68 | struct clk *clk[3]; | 69 | struct clk *clk[3]; |
| 69 | struct list_head node; | 70 | struct list_head node; |
| 71 | bool allocated; | ||
| 70 | }; | 72 | }; |
| 71 | 73 | ||
| 72 | extern struct atmel_tc *atmel_tc_alloc(unsigned block, const char *name); | 74 | extern struct atmel_tc *atmel_tc_alloc(unsigned block); |
| 73 | extern void atmel_tc_free(struct atmel_tc *tc); | 75 | extern void atmel_tc_free(struct atmel_tc *tc); |
| 74 | 76 | ||
| 75 | /* platform-specific ATMEL_TC_TIMER_CLOCKx divisors (0 means 32KiHz) */ | 77 | /* platform-specific ATMEL_TC_TIMER_CLOCKx divisors (0 means 32KiHz) */ |
| @@ -258,5 +260,10 @@ extern const u8 atmel_tc_divisors[5]; | |||
| 258 | #define ATMEL_TC_LDRAS (1 << 5) /* RA loading */ | 260 | #define ATMEL_TC_LDRAS (1 << 5) /* RA loading */ |
| 259 | #define ATMEL_TC_LDRBS (1 << 6) /* RB loading */ | 261 | #define ATMEL_TC_LDRBS (1 << 6) /* RB loading */ |
| 260 | #define ATMEL_TC_ETRGS (1 << 7) /* external trigger */ | 262 | #define ATMEL_TC_ETRGS (1 << 7) /* external trigger */ |
| 263 | #define ATMEL_TC_ALL_IRQ (ATMEL_TC_COVFS | ATMEL_TC_LOVRS | \ | ||
| 264 | ATMEL_TC_CPAS | ATMEL_TC_CPBS | \ | ||
| 265 | ATMEL_TC_CPCS | ATMEL_TC_LDRAS | \ | ||
| 266 | ATMEL_TC_LDRBS | ATMEL_TC_ETRGS) \ | ||
| 267 | /* all IRQs */ | ||
| 261 | 268 | ||
| 262 | #endif | 269 | #endif |
