]>
Commit | Line | Data |
---|---|---|
aaf9128a | 1 | // SPDX-License-Identifier: GPL-2.0 |
3787aa11 PM |
2 | /* |
3 | * Renesas Technology Europe RSK+ 7203 Support. | |
4 | * | |
852af59f | 5 | * Copyright (C) 2008 - 2010 Paul Mundt |
3787aa11 PM |
6 | */ |
7 | #include <linux/init.h> | |
8 | #include <linux/types.h> | |
9 | #include <linux/platform_device.h> | |
6d0b3657 | 10 | #include <linux/interrupt.h> |
8ed3592e | 11 | #include <linux/smsc911x.h> |
852af59f | 12 | #include <linux/input.h> |
7a5c679b | 13 | #include <linux/gpio.h> |
852af59f | 14 | #include <linux/gpio_keys.h> |
bbc97411 | 15 | #include <linux/leds.h> |
3787aa11 PM |
16 | #include <asm/machvec.h> |
17 | #include <asm/io.h> | |
a51413a6 | 18 | #include <cpu/sh7203.h> |
3787aa11 | 19 | |
8ed3592e SG |
20 | static struct smsc911x_platform_config smsc911x_config = { |
21 | .phy_interface = PHY_INTERFACE_MODE_MII, | |
22 | .irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW, | |
23 | .irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN, | |
724cfb94 | 24 | .flags = SMSC911X_USE_32BIT | SMSC911X_SWAP_FIFO, |
6d0b3657 PM |
25 | }; |
26 | ||
8ed3592e | 27 | static struct resource smsc911x_resources[] = { |
3787aa11 PM |
28 | [0] = { |
29 | .start = 0x24000000, | |
724cfb94 | 30 | .end = 0x240000ff, |
3787aa11 PM |
31 | .flags = IORESOURCE_MEM, |
32 | }, | |
33 | [1] = { | |
34 | .start = 64, | |
35 | .end = 64, | |
36 | .flags = IORESOURCE_IRQ, | |
37 | }, | |
38 | }; | |
39 | ||
8ed3592e SG |
40 | static struct platform_device smsc911x_device = { |
41 | .name = "smsc911x", | |
3787aa11 | 42 | .id = -1, |
8ed3592e SG |
43 | .num_resources = ARRAY_SIZE(smsc911x_resources), |
44 | .resource = smsc911x_resources, | |
6d0b3657 | 45 | .dev = { |
8ed3592e | 46 | .platform_data = &smsc911x_config, |
6d0b3657 | 47 | }, |
3787aa11 PM |
48 | }; |
49 | ||
bbc97411 PM |
50 | static struct gpio_led rsk7203_gpio_leds[] = { |
51 | { | |
52 | .name = "green", | |
53 | .gpio = GPIO_PE10, | |
54 | .active_low = 1, | |
55 | }, { | |
56 | .name = "orange", | |
57 | .default_trigger = "nand-disk", | |
58 | .gpio = GPIO_PE12, | |
59 | .active_low = 1, | |
60 | }, { | |
61 | .name = "red:timer", | |
62 | .default_trigger = "timer", | |
63 | .gpio = GPIO_PC14, | |
64 | .active_low = 1, | |
65 | }, { | |
66 | .name = "red:heartbeat", | |
67 | .default_trigger = "heartbeat", | |
68 | .gpio = GPIO_PE11, | |
69 | .active_low = 1, | |
70 | }, | |
71 | }; | |
72 | ||
73 | static struct gpio_led_platform_data rsk7203_gpio_leds_info = { | |
74 | .leds = rsk7203_gpio_leds, | |
75 | .num_leds = ARRAY_SIZE(rsk7203_gpio_leds), | |
76 | }; | |
77 | ||
78 | static struct platform_device led_device = { | |
79 | .name = "leds-gpio", | |
80 | .id = -1, | |
81 | .dev = { | |
82 | .platform_data = &rsk7203_gpio_leds_info, | |
83 | }, | |
84 | }; | |
3787aa11 | 85 | |
852af59f PM |
86 | static struct gpio_keys_button rsk7203_gpio_keys_table[] = { |
87 | { | |
88 | .code = BTN_0, | |
89 | .gpio = GPIO_PB0, | |
90 | .active_low = 1, | |
91 | .desc = "SW1", | |
92 | }, { | |
93 | .code = BTN_1, | |
94 | .gpio = GPIO_PB1, | |
95 | .active_low = 1, | |
96 | .desc = "SW2", | |
97 | }, { | |
98 | .code = BTN_2, | |
99 | .gpio = GPIO_PB2, | |
100 | .active_low = 1, | |
101 | .desc = "SW3", | |
102 | }, | |
103 | }; | |
104 | ||
105 | static struct gpio_keys_platform_data rsk7203_gpio_keys_info = { | |
106 | .buttons = rsk7203_gpio_keys_table, | |
107 | .nbuttons = ARRAY_SIZE(rsk7203_gpio_keys_table), | |
108 | .poll_interval = 50, /* default to 50ms */ | |
109 | }; | |
110 | ||
111 | static struct platform_device keys_device = { | |
112 | .name = "gpio-keys-polled", | |
113 | .dev = { | |
114 | .platform_data = &rsk7203_gpio_keys_info, | |
115 | }, | |
116 | }; | |
117 | ||
3787aa11 | 118 | static struct platform_device *rsk7203_devices[] __initdata = { |
8ed3592e | 119 | &smsc911x_device, |
bbc97411 | 120 | &led_device, |
852af59f | 121 | &keys_device, |
3787aa11 PM |
122 | }; |
123 | ||
124 | static int __init rsk7203_devices_setup(void) | |
125 | { | |
7a5c679b MD |
126 | /* Select pins for SCIF0 */ |
127 | gpio_request(GPIO_FN_TXD0, NULL); | |
128 | gpio_request(GPIO_FN_RXD0, NULL); | |
129 | ||
724cfb94 | 130 | /* Setup LAN9118: CS1 in 16-bit Big Endian Mode, IRQ0 at Port B */ |
9d56dd3b | 131 | __raw_writel(0x36db0400, 0xfffc0008); /* CS1BCR */ |
724cfb94 MD |
132 | gpio_request(GPIO_FN_IRQ0_PB, NULL); |
133 | ||
3787aa11 PM |
134 | return platform_add_devices(rsk7203_devices, |
135 | ARRAY_SIZE(rsk7203_devices)); | |
136 | } | |
137 | device_initcall(rsk7203_devices_setup); |