diff options
Diffstat (limited to 'arch/arm/mach-ixp4xx/goramo_mlr.c')
-rw-r--r-- | arch/arm/mach-ixp4xx/goramo_mlr.c | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/arch/arm/mach-ixp4xx/goramo_mlr.c b/arch/arm/mach-ixp4xx/goramo_mlr.c index e54ff491c105..80bd9d6d04de 100644 --- a/arch/arm/mach-ixp4xx/goramo_mlr.c +++ b/arch/arm/mach-ixp4xx/goramo_mlr.c | |||
@@ -4,6 +4,7 @@ | |||
4 | */ | 4 | */ |
5 | 5 | ||
6 | #include <linux/delay.h> | 6 | #include <linux/delay.h> |
7 | #include <linux/gpio.h> | ||
7 | #include <linux/hdlc.h> | 8 | #include <linux/hdlc.h> |
8 | #include <linux/i2c-gpio.h> | 9 | #include <linux/i2c-gpio.h> |
9 | #include <linux/io.h> | 10 | #include <linux/io.h> |
@@ -79,19 +80,19 @@ static u8 control_value; | |||
79 | 80 | ||
80 | static void set_scl(u8 value) | 81 | static void set_scl(u8 value) |
81 | { | 82 | { |
82 | gpio_line_set(GPIO_SCL, !!value); | 83 | gpio_set_value(GPIO_SCL, !!value); |
83 | udelay(3); | 84 | udelay(3); |
84 | } | 85 | } |
85 | 86 | ||
86 | static void set_sda(u8 value) | 87 | static void set_sda(u8 value) |
87 | { | 88 | { |
88 | gpio_line_set(GPIO_SDA, !!value); | 89 | gpio_set_value(GPIO_SDA, !!value); |
89 | udelay(3); | 90 | udelay(3); |
90 | } | 91 | } |
91 | 92 | ||
92 | static void set_str(u8 value) | 93 | static void set_str(u8 value) |
93 | { | 94 | { |
94 | gpio_line_set(GPIO_STR, !!value); | 95 | gpio_set_value(GPIO_STR, !!value); |
95 | udelay(3); | 96 | udelay(3); |
96 | } | 97 | } |
97 | 98 | ||
@@ -108,8 +109,8 @@ static void output_control(void) | |||
108 | { | 109 | { |
109 | int i; | 110 | int i; |
110 | 111 | ||
111 | gpio_line_config(GPIO_SCL, IXP4XX_GPIO_OUT); | 112 | gpio_direction_output(GPIO_SCL, 1); |
112 | gpio_line_config(GPIO_SDA, IXP4XX_GPIO_OUT); | 113 | gpio_direction_output(GPIO_SDA, 1); |
113 | 114 | ||
114 | for (i = 0; i < 8; i++) { | 115 | for (i = 0; i < 8; i++) { |
115 | set_scl(0); | 116 | set_scl(0); |
@@ -151,8 +152,8 @@ static int hss_set_clock(int port, unsigned int clock_type) | |||
151 | 152 | ||
152 | static irqreturn_t hss_dcd_irq(int irq, void *pdev) | 153 | static irqreturn_t hss_dcd_irq(int irq, void *pdev) |
153 | { | 154 | { |
154 | int i, port = (irq == IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N)); | 155 | int port = (irq == IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N)); |
155 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); | 156 | int i = gpio_get_value(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N); |
156 | set_carrier_cb_tab[port](pdev, !i); | 157 | set_carrier_cb_tab[port](pdev, !i); |
157 | return IRQ_HANDLED; | 158 | return IRQ_HANDLED; |
158 | } | 159 | } |
@@ -168,7 +169,7 @@ static int hss_open(int port, void *pdev, | |||
168 | else | 169 | else |
169 | irq = IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N); | 170 | irq = IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N); |
170 | 171 | ||
171 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); | 172 | i = gpio_get_value(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N); |
172 | set_carrier_cb(pdev, !i); | 173 | set_carrier_cb(pdev, !i); |
173 | 174 | ||
174 | set_carrier_cb_tab[!!port] = set_carrier_cb; | 175 | set_carrier_cb_tab[!!port] = set_carrier_cb; |
@@ -181,7 +182,7 @@ static int hss_open(int port, void *pdev, | |||
181 | 182 | ||
182 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 0); | 183 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 0); |
183 | output_control(); | 184 | output_control(); |
184 | gpio_line_set(port ? GPIO_HSS1_RTS_N : GPIO_HSS0_RTS_N, 0); | 185 | gpio_set_value(port ? GPIO_HSS1_RTS_N : GPIO_HSS0_RTS_N, 0); |
185 | return 0; | 186 | return 0; |
186 | } | 187 | } |
187 | 188 | ||
@@ -193,7 +194,7 @@ static void hss_close(int port, void *pdev) | |||
193 | 194 | ||
194 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); | 195 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); |
195 | output_control(); | 196 | output_control(); |
196 | gpio_line_set(port ? GPIO_HSS1_RTS_N : GPIO_HSS0_RTS_N, 1); | 197 | gpio_set_value(port ? GPIO_HSS1_RTS_N : GPIO_HSS0_RTS_N, 1); |
197 | } | 198 | } |
198 | 199 | ||
199 | 200 | ||
@@ -413,13 +414,21 @@ static void __init gmlr_init(void) | |||
413 | if (hw_bits & CFG_HW_HAS_EEPROM) | 414 | if (hw_bits & CFG_HW_HAS_EEPROM) |
414 | device_tab[devices++] = &device_i2c; /* max index 6 */ | 415 | device_tab[devices++] = &device_i2c; /* max index 6 */ |
415 | 416 | ||
416 | gpio_line_config(GPIO_SCL, IXP4XX_GPIO_OUT); | 417 | gpio_request(GPIO_SCL, "SCL/clock"); |
417 | gpio_line_config(GPIO_SDA, IXP4XX_GPIO_OUT); | 418 | gpio_request(GPIO_SDA, "SDA/data"); |
418 | gpio_line_config(GPIO_STR, IXP4XX_GPIO_OUT); | 419 | gpio_request(GPIO_STR, "strobe"); |
419 | gpio_line_config(GPIO_HSS0_RTS_N, IXP4XX_GPIO_OUT); | 420 | gpio_request(GPIO_HSS0_RTS_N, "HSS0 RTS"); |
420 | gpio_line_config(GPIO_HSS1_RTS_N, IXP4XX_GPIO_OUT); | 421 | gpio_request(GPIO_HSS1_RTS_N, "HSS1 RTS"); |
421 | gpio_line_config(GPIO_HSS0_DCD_N, IXP4XX_GPIO_IN); | 422 | gpio_request(GPIO_HSS0_DCD_N, "HSS0 DCD"); |
422 | gpio_line_config(GPIO_HSS1_DCD_N, IXP4XX_GPIO_IN); | 423 | gpio_request(GPIO_HSS1_DCD_N, "HSS1 DCD"); |
424 | |||
425 | gpio_direction_output(GPIO_SCL, 1); | ||
426 | gpio_direction_output(GPIO_SDA, 1); | ||
427 | gpio_direction_output(GPIO_STR, 0); | ||
428 | gpio_direction_output(GPIO_HSS0_RTS_N, 1); | ||
429 | gpio_direction_output(GPIO_HSS1_RTS_N, 1); | ||
430 | gpio_direction_input(GPIO_HSS0_DCD_N); | ||
431 | gpio_direction_input(GPIO_HSS1_DCD_N); | ||
423 | irq_set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); | 432 | irq_set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); |
424 | irq_set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); | 433 | irq_set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); |
425 | 434 | ||