diff options
author | Eric Miao <eric.miao@marvell.com> | 2009-04-13 06:29:52 -0400 |
---|---|---|
committer | Eric Miao <eric.y.miao@gmail.com> | 2009-06-04 22:32:06 -0400 |
commit | a27ba768a11ac7a1d56688d4224cef3a802d1f89 (patch) | |
tree | b6454495caae2103a104c0ae14232eed6e151738 /arch/arm/mach-mmp | |
parent | 2a55b910e0d240984860fa0264866c122751bd09 (diff) |
[ARM] pxa: add PWM devices support for pxa168/910
Signed-off-by: Mingwei Wang <mingwei.wang@marvell.com>
Signed-off-by: Eric Miao <eric.miao@marvell.com>
Diffstat (limited to 'arch/arm/mach-mmp')
-rw-r--r-- | arch/arm/mach-mmp/include/mach/mfp-pxa168.h | 23 | ||||
-rw-r--r-- | arch/arm/mach-mmp/include/mach/mfp-pxa910.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-mmp/include/mach/pxa168.h | 20 | ||||
-rw-r--r-- | arch/arm/mach-mmp/include/mach/pxa910.h | 20 | ||||
-rw-r--r-- | arch/arm/mach-mmp/include/mach/regs-apbc.h | 14 | ||||
-rw-r--r-- | arch/arm/mach-mmp/pxa168.c | 12 | ||||
-rw-r--r-- | arch/arm/mach-mmp/pxa910.c | 12 |
7 files changed, 103 insertions, 6 deletions
diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h index dc4226371d64..3b216bf41e7f 100644 --- a/arch/arm/mach-mmp/include/mach/mfp-pxa168.h +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa168.h | |||
@@ -264,4 +264,27 @@ | |||
264 | #define GPIO116_I2S_RXD MFP_CFG(GPIO116,AF2) | 264 | #define GPIO116_I2S_RXD MFP_CFG(GPIO116,AF2) |
265 | #define GPIO117_I2S_TXD MFP_CFG(GPIO117,AF2) | 265 | #define GPIO117_I2S_TXD MFP_CFG(GPIO117,AF2) |
266 | 266 | ||
267 | /* PWM */ | ||
268 | #define GPIO96_PWM3_OUT MFP_CFG(GPIO96, AF1) | ||
269 | #define GPIO97_PWM2_OUT MFP_CFG(GPIO97, AF1) | ||
270 | #define GPIO98_PWM1_OUT MFP_CFG(GPIO98, AF1) | ||
271 | #define GPIO104_PWM4_OUT MFP_CFG(GPIO104, AF1) | ||
272 | #define GPIO106_PWM2_OUT MFP_CFG(GPIO106, AF2) | ||
273 | #define GPIO74_PWM4_OUT MFP_CFG(GPIO74, AF2) | ||
274 | #define GPIO75_PWM3_OUT MFP_CFG(GPIO75, AF2) | ||
275 | #define GPIO76_PWM2_OUT MFP_CFG(GPIO76, AF2) | ||
276 | #define GPIO77_PWM1_OUT MFP_CFG(GPIO77, AF2) | ||
277 | #define GPIO82_PWM4_OUT MFP_CFG(GPIO82, AF2) | ||
278 | #define GPIO83_PWM3_OUT MFP_CFG(GPIO83, AF2) | ||
279 | #define GPIO84_PWM2_OUT MFP_CFG(GPIO84, AF2) | ||
280 | #define GPIO85_PWM1_OUT MFP_CFG(GPIO85, AF2) | ||
281 | #define GPIO84_PWM1_OUT MFP_CFG(GPIO84, AF4) | ||
282 | #define GPIO122_PWM3_OUT MFP_CFG(GPIO122, AF3) | ||
283 | #define GPIO123_PWM1_OUT MFP_CFG(GPIO123, AF1) | ||
284 | #define GPIO124_PWM2_OUT MFP_CFG(GPIO124, AF1) | ||
285 | #define GPIO125_PWM3_OUT MFP_CFG(GPIO125, AF1) | ||
286 | #define GPIO126_PWM4_OUT MFP_CFG(GPIO126, AF1) | ||
287 | #define GPIO86_PWM1_OUT MFP_CFG(GPIO86, AF2) | ||
288 | #define GPIO86_PWM2_OUT MFP_CFG(GPIO86, AF3) | ||
289 | |||
267 | #endif /* __ASM_MACH_MFP_PXA168_H */ | 290 | #endif /* __ASM_MACH_MFP_PXA168_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h index d97de36c50ad..bf1189ff9a34 100644 --- a/arch/arm/mach-mmp/include/mach/mfp-pxa910.h +++ b/arch/arm/mach-mmp/include/mach/mfp-pxa910.h | |||
@@ -159,4 +159,12 @@ | |||
159 | #define MMC1_CD_MMC1_CD MFP_CFG_DRV(MMC1_CD, AF0, MEDIUM) | 159 | #define MMC1_CD_MMC1_CD MFP_CFG_DRV(MMC1_CD, AF0, MEDIUM) |
160 | #define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM) | 160 | #define MMC1_WP_MMC1_WP MFP_CFG_DRV(MMC1_WP, AF0, MEDIUM) |
161 | 161 | ||
162 | /* PWM */ | ||
163 | #define GPIO27 PWM3 AF2 MFP_CFG(GPIO27, AF2) | ||
164 | #define GPIO51_PWM2_OUT MFP_CFG(GPIO51, AF2) | ||
165 | #define GPIO117_PWM1_OUT MFP_CFG(GPIO117, AF2) | ||
166 | #define GPIO118_PWM2_OUT MFP_CFG(GPIO118, AF2) | ||
167 | #define GPIO119_PWM3_OUT MFP_CFG(GPIO119, AF2) | ||
168 | #define GPIO120_PWM4_OUT MFP_CFG(GPIO120, AF2) | ||
169 | |||
162 | #endif /* __ASM_MACH MFP_PXA910_H */ | 170 | #endif /* __ASM_MACH MFP_PXA910_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/pxa168.h b/arch/arm/mach-mmp/include/mach/pxa168.h index bfdd6299dff5..6bf1f0eefcd1 100644 --- a/arch/arm/mach-mmp/include/mach/pxa168.h +++ b/arch/arm/mach-mmp/include/mach/pxa168.h | |||
@@ -9,6 +9,10 @@ extern struct pxa_device_desc pxa168_device_uart1; | |||
9 | extern struct pxa_device_desc pxa168_device_uart2; | 9 | extern struct pxa_device_desc pxa168_device_uart2; |
10 | extern struct pxa_device_desc pxa168_device_twsi0; | 10 | extern struct pxa_device_desc pxa168_device_twsi0; |
11 | extern struct pxa_device_desc pxa168_device_twsi1; | 11 | extern struct pxa_device_desc pxa168_device_twsi1; |
12 | extern struct pxa_device_desc pxa168_device_pwm1; | ||
13 | extern struct pxa_device_desc pxa168_device_pwm2; | ||
14 | extern struct pxa_device_desc pxa168_device_pwm3; | ||
15 | extern struct pxa_device_desc pxa168_device_pwm4; | ||
12 | 16 | ||
13 | static inline int pxa168_add_uart(int id) | 17 | static inline int pxa168_add_uart(int id) |
14 | { | 18 | { |
@@ -44,4 +48,20 @@ static inline int pxa168_add_twsi(int id, struct i2c_pxa_platform_data *data, | |||
44 | 48 | ||
45 | return pxa_register_device(d, data, sizeof(*data)); | 49 | return pxa_register_device(d, data, sizeof(*data)); |
46 | } | 50 | } |
51 | |||
52 | static inline int pxa168_add_pwm(int id) | ||
53 | { | ||
54 | struct pxa_device_desc *d = NULL; | ||
55 | |||
56 | switch (id) { | ||
57 | case 1: d = &pxa168_device_pwm1; break; | ||
58 | case 2: d = &pxa168_device_pwm2; break; | ||
59 | case 3: d = &pxa168_device_pwm3; break; | ||
60 | case 4: d = &pxa168_device_pwm4; break; | ||
61 | default: | ||
62 | return -EINVAL; | ||
63 | } | ||
64 | |||
65 | return pxa_register_device(d, NULL, 0); | ||
66 | } | ||
47 | #endif /* __ASM_MACH_PXA168_H */ | 67 | #endif /* __ASM_MACH_PXA168_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/pxa910.h b/arch/arm/mach-mmp/include/mach/pxa910.h index a0f0cbee1c07..6ae1ed7a0a9f 100644 --- a/arch/arm/mach-mmp/include/mach/pxa910.h +++ b/arch/arm/mach-mmp/include/mach/pxa910.h | |||
@@ -9,6 +9,10 @@ extern struct pxa_device_desc pxa910_device_uart1; | |||
9 | extern struct pxa_device_desc pxa910_device_uart2; | 9 | extern struct pxa_device_desc pxa910_device_uart2; |
10 | extern struct pxa_device_desc pxa910_device_twsi0; | 10 | extern struct pxa_device_desc pxa910_device_twsi0; |
11 | extern struct pxa_device_desc pxa910_device_twsi1; | 11 | extern struct pxa_device_desc pxa910_device_twsi1; |
12 | extern struct pxa_device_desc pxa910_device_pwm1; | ||
13 | extern struct pxa_device_desc pxa910_device_pwm2; | ||
14 | extern struct pxa_device_desc pxa910_device_pwm3; | ||
15 | extern struct pxa_device_desc pxa910_device_pwm4; | ||
12 | 16 | ||
13 | static inline int pxa910_add_uart(int id) | 17 | static inline int pxa910_add_uart(int id) |
14 | { | 18 | { |
@@ -44,4 +48,20 @@ static inline int pxa910_add_twsi(int id, struct i2c_pxa_platform_data *data, | |||
44 | 48 | ||
45 | return pxa_register_device(d, data, sizeof(*data)); | 49 | return pxa_register_device(d, data, sizeof(*data)); |
46 | } | 50 | } |
51 | |||
52 | static inline int pxa910_add_pwm(int id) | ||
53 | { | ||
54 | struct pxa_device_desc *d = NULL; | ||
55 | |||
56 | switch (id) { | ||
57 | case 1: d = &pxa910_device_pwm1; break; | ||
58 | case 2: d = &pxa910_device_pwm2; break; | ||
59 | case 3: d = &pxa910_device_pwm3; break; | ||
60 | case 4: d = &pxa910_device_pwm4; break; | ||
61 | default: | ||
62 | return -EINVAL; | ||
63 | } | ||
64 | |||
65 | return pxa_register_device(d, NULL, 0); | ||
66 | } | ||
47 | #endif /* __ASM_MACH_PXA910_H */ | 67 | #endif /* __ASM_MACH_PXA910_H */ |
diff --git a/arch/arm/mach-mmp/include/mach/regs-apbc.h b/arch/arm/mach-mmp/include/mach/regs-apbc.h index c6b8c9dc2026..98ccbee4bd0c 100644 --- a/arch/arm/mach-mmp/include/mach/regs-apbc.h +++ b/arch/arm/mach-mmp/include/mach/regs-apbc.h | |||
@@ -22,8 +22,10 @@ | |||
22 | #define APBC_PXA168_UART1 APBC_REG(0x000) | 22 | #define APBC_PXA168_UART1 APBC_REG(0x000) |
23 | #define APBC_PXA168_UART2 APBC_REG(0x004) | 23 | #define APBC_PXA168_UART2 APBC_REG(0x004) |
24 | #define APBC_PXA168_GPIO APBC_REG(0x008) | 24 | #define APBC_PXA168_GPIO APBC_REG(0x008) |
25 | #define APBC_PXA168_PWM0 APBC_REG(0x00c) | 25 | #define APBC_PXA168_PWM1 APBC_REG(0x00c) |
26 | #define APBC_PXA168_PWM1 APBC_REG(0x010) | 26 | #define APBC_PXA168_PWM2 APBC_REG(0x010) |
27 | #define APBC_PXA168_PWM3 APBC_REG(0x014) | ||
28 | #define APBC_PXA168_PWM4 APBC_REG(0x018) | ||
27 | #define APBC_PXA168_SSP1 APBC_REG(0x01c) | 29 | #define APBC_PXA168_SSP1 APBC_REG(0x01c) |
28 | #define APBC_PXA168_SSP2 APBC_REG(0x020) | 30 | #define APBC_PXA168_SSP2 APBC_REG(0x020) |
29 | #define APBC_PXA168_RTC APBC_REG(0x028) | 31 | #define APBC_PXA168_RTC APBC_REG(0x028) |
@@ -48,10 +50,10 @@ | |||
48 | #define APBC_PXA910_UART0 APBC_REG(0x000) | 50 | #define APBC_PXA910_UART0 APBC_REG(0x000) |
49 | #define APBC_PXA910_UART1 APBC_REG(0x004) | 51 | #define APBC_PXA910_UART1 APBC_REG(0x004) |
50 | #define APBC_PXA910_GPIO APBC_REG(0x008) | 52 | #define APBC_PXA910_GPIO APBC_REG(0x008) |
51 | #define APBC_PXA910_PWM0 APBC_REG(0x00c) | 53 | #define APBC_PXA910_PWM1 APBC_REG(0x00c) |
52 | #define APBC_PXA910_PWM1 APBC_REG(0x010) | 54 | #define APBC_PXA910_PWM2 APBC_REG(0x010) |
53 | #define APBC_PXA910_PWM2 APBC_REG(0x014) | 55 | #define APBC_PXA910_PWM3 APBC_REG(0x014) |
54 | #define APBC_PXA910_PWM3 APBC_REG(0x018) | 56 | #define APBC_PXA910_PWM4 APBC_REG(0x018) |
55 | #define APBC_PXA910_SSP1 APBC_REG(0x01c) | 57 | #define APBC_PXA910_SSP1 APBC_REG(0x01c) |
56 | #define APBC_PXA910_SSP2 APBC_REG(0x020) | 58 | #define APBC_PXA910_SSP2 APBC_REG(0x020) |
57 | #define APBC_PXA910_IPC APBC_REG(0x024) | 59 | #define APBC_PXA910_IPC APBC_REG(0x024) |
diff --git a/arch/arm/mach-mmp/pxa168.c b/arch/arm/mach-mmp/pxa168.c index e0729e34f7ad..71b1ae338753 100644 --- a/arch/arm/mach-mmp/pxa168.c +++ b/arch/arm/mach-mmp/pxa168.c | |||
@@ -67,6 +67,10 @@ static APBC_CLK(uart1, PXA168_UART1, 1, 14745600); | |||
67 | static APBC_CLK(uart2, PXA168_UART2, 1, 14745600); | 67 | static APBC_CLK(uart2, PXA168_UART2, 1, 14745600); |
68 | static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000); | 68 | static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000); |
69 | static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000); | 69 | static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000); |
70 | static APBC_CLK(pwm1, PXA168_PWM1, 1, 13000000); | ||
71 | static APBC_CLK(pwm2, PXA168_PWM2, 1, 13000000); | ||
72 | static APBC_CLK(pwm3, PXA168_PWM3, 1, 13000000); | ||
73 | static APBC_CLK(pwm4, PXA168_PWM4, 1, 13000000); | ||
70 | 74 | ||
71 | /* device and clock bindings */ | 75 | /* device and clock bindings */ |
72 | static struct clk_lookup pxa168_clkregs[] = { | 76 | static struct clk_lookup pxa168_clkregs[] = { |
@@ -74,6 +78,10 @@ static struct clk_lookup pxa168_clkregs[] = { | |||
74 | INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), | 78 | INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), |
75 | INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL), | 79 | INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL), |
76 | INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL), | 80 | INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL), |
81 | INIT_CLKREG(&clk_pwm1, "pxa168-pwm.0", NULL), | ||
82 | INIT_CLKREG(&clk_pwm2, "pxa168-pwm.1", NULL), | ||
83 | INIT_CLKREG(&clk_pwm3, "pxa168-pwm.2", NULL), | ||
84 | INIT_CLKREG(&clk_pwm4, "pxa168-pwm.3", NULL), | ||
77 | }; | 85 | }; |
78 | 86 | ||
79 | static int __init pxa168_init(void) | 87 | static int __init pxa168_init(void) |
@@ -115,3 +123,7 @@ PXA168_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4017000, 0x30, 21, 22); | |||
115 | PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24); | 123 | PXA168_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4018000, 0x30, 23, 24); |
116 | PXA168_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28); | 124 | PXA168_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28); |
117 | PXA168_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28); | 125 | PXA168_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28); |
126 | PXA168_DEVICE(pwm1, "pxa168-pwm", 0, NONE, 0xd401a000, 0x10); | ||
127 | PXA168_DEVICE(pwm2, "pxa168-pwm", 1, NONE, 0xd401a400, 0x10); | ||
128 | PXA168_DEVICE(pwm3, "pxa168-pwm", 2, NONE, 0xd401a800, 0x10); | ||
129 | PXA168_DEVICE(pwm4, "pxa168-pwm", 3, NONE, 0xd401ac00, 0x10); | ||
diff --git a/arch/arm/mach-mmp/pxa910.c b/arch/arm/mach-mmp/pxa910.c index b97328b96ce7..5882ca6b49fb 100644 --- a/arch/arm/mach-mmp/pxa910.c +++ b/arch/arm/mach-mmp/pxa910.c | |||
@@ -105,6 +105,10 @@ static APBC_CLK(uart1, PXA910_UART0, 1, 14745600); | |||
105 | static APBC_CLK(uart2, PXA910_UART1, 1, 14745600); | 105 | static APBC_CLK(uart2, PXA910_UART1, 1, 14745600); |
106 | static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000); | 106 | static APBC_CLK(twsi0, PXA168_TWSI0, 1, 33000000); |
107 | static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000); | 107 | static APBC_CLK(twsi1, PXA168_TWSI1, 1, 33000000); |
108 | static APBC_CLK(pwm1, PXA910_PWM1, 1, 13000000); | ||
109 | static APBC_CLK(pwm2, PXA910_PWM2, 1, 13000000); | ||
110 | static APBC_CLK(pwm3, PXA910_PWM3, 1, 13000000); | ||
111 | static APBC_CLK(pwm4, PXA910_PWM4, 1, 13000000); | ||
108 | 112 | ||
109 | /* device and clock bindings */ | 113 | /* device and clock bindings */ |
110 | static struct clk_lookup pxa910_clkregs[] = { | 114 | static struct clk_lookup pxa910_clkregs[] = { |
@@ -112,6 +116,10 @@ static struct clk_lookup pxa910_clkregs[] = { | |||
112 | INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), | 116 | INIT_CLKREG(&clk_uart2, "pxa2xx-uart.1", NULL), |
113 | INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL), | 117 | INIT_CLKREG(&clk_twsi0, "pxa2xx-i2c.0", NULL), |
114 | INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL), | 118 | INIT_CLKREG(&clk_twsi1, "pxa2xx-i2c.1", NULL), |
119 | INIT_CLKREG(&clk_pwm1, "pxa910-pwm.0", NULL), | ||
120 | INIT_CLKREG(&clk_pwm2, "pxa910-pwm.1", NULL), | ||
121 | INIT_CLKREG(&clk_pwm3, "pxa910-pwm.2", NULL), | ||
122 | INIT_CLKREG(&clk_pwm4, "pxa910-pwm.3", NULL), | ||
115 | }; | 123 | }; |
116 | 124 | ||
117 | static int __init pxa910_init(void) | 125 | static int __init pxa910_init(void) |
@@ -162,3 +170,7 @@ PXA910_DEVICE(uart1, "pxa2xx-uart", 0, UART2, 0xd4017000, 0x30, 21, 22); | |||
162 | PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24); | 170 | PXA910_DEVICE(uart2, "pxa2xx-uart", 1, UART3, 0xd4018000, 0x30, 23, 24); |
163 | PXA910_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28); | 171 | PXA910_DEVICE(twsi0, "pxa2xx-i2c", 0, TWSI0, 0xd4011000, 0x28); |
164 | PXA910_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28); | 172 | PXA910_DEVICE(twsi1, "pxa2xx-i2c", 1, TWSI1, 0xd4025000, 0x28); |
173 | PXA910_DEVICE(pwm1, "pxa910-pwm", 0, NONE, 0xd401a000, 0x10); | ||
174 | PXA910_DEVICE(pwm2, "pxa910-pwm", 1, NONE, 0xd401a400, 0x10); | ||
175 | PXA910_DEVICE(pwm3, "pxa910-pwm", 2, NONE, 0xd401a800, 0x10); | ||
176 | PXA910_DEVICE(pwm4, "pxa910-pwm", 3, NONE, 0xd401ac00, 0x10); | ||