提交 93a22f8b 编写于 作者: D David Brownell 提交者: Linus Torvalds

omap drivers: switch to standard GPIO calls

This updates most of the OMAP drivers which are in mainline to switch to
using the cross-platform GPIO calls instead of the older OMAP-specific
ones.

This is all fairly brainless/obvious stuff.  Probably the most interesting
bit is to observe that the omap-keypad code seems to now have a portable
core that could work with non-OMAP matrix keypads.  (That would improve
with hardware IRQ debouncing enabled, of course...)
Signed-off-by: NDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: NTony Lindgren <tony@atomide.com>
Cc: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Cc: Antonino Daplas <adaplas@gmail.com>
Cc: David Woodhouse <dwmw2@infradead.org>
Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
上级 0f6d504e
...@@ -72,12 +72,9 @@ static unsigned int *col_gpios; ...@@ -72,12 +72,9 @@ static unsigned int *col_gpios;
static void set_col_gpio_val(struct omap_kp *omap_kp, u8 value) static void set_col_gpio_val(struct omap_kp *omap_kp, u8 value)
{ {
int col; int col;
for (col = 0; col < omap_kp->cols; col++) {
if (value & (1 << col)) for (col = 0; col < omap_kp->cols; col++)
omap_set_gpio_dataout(col_gpios[col], 1); gpio_set_value(col_gpios[col], value & (1 << col));
else
omap_set_gpio_dataout(col_gpios[col], 0);
}
} }
static u8 get_row_gpio_val(struct omap_kp *omap_kp) static u8 get_row_gpio_val(struct omap_kp *omap_kp)
...@@ -86,7 +83,7 @@ static u8 get_row_gpio_val(struct omap_kp *omap_kp) ...@@ -86,7 +83,7 @@ static u8 get_row_gpio_val(struct omap_kp *omap_kp)
u8 value = 0; u8 value = 0;
for (row = 0; row < omap_kp->rows; row++) { for (row = 0; row < omap_kp->rows; row++) {
if (omap_get_gpio_datain(row_gpios[row])) if (gpio_get_value(row_gpios[row]))
value |= (1 << row); value |= (1 << row);
} }
return value; return value;
...@@ -333,23 +330,23 @@ static int __init omap_kp_probe(struct platform_device *pdev) ...@@ -333,23 +330,23 @@ static int __init omap_kp_probe(struct platform_device *pdev)
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
/* Cols: outputs */ /* Cols: outputs */
for (col_idx = 0; col_idx < omap_kp->cols; col_idx++) { for (col_idx = 0; col_idx < omap_kp->cols; col_idx++) {
if (omap_request_gpio(col_gpios[col_idx]) < 0) { if (gpio_request(col_gpios[col_idx], "omap_kp_col") < 0) {
printk(KERN_ERR "Failed to request" printk(KERN_ERR "Failed to request"
"GPIO%d for keypad\n", "GPIO%d for keypad\n",
col_gpios[col_idx]); col_gpios[col_idx]);
goto err1; goto err1;
} }
omap_set_gpio_direction(col_gpios[col_idx], 0); gpio_direction_output(col_gpios[col_idx], 0);
} }
/* Rows: inputs */ /* Rows: inputs */
for (row_idx = 0; row_idx < omap_kp->rows; row_idx++) { for (row_idx = 0; row_idx < omap_kp->rows; row_idx++) {
if (omap_request_gpio(row_gpios[row_idx]) < 0) { if (gpio_request(row_gpios[row_idx], "omap_kp_row") < 0) {
printk(KERN_ERR "Failed to request" printk(KERN_ERR "Failed to request"
"GPIO%d for keypad\n", "GPIO%d for keypad\n",
row_gpios[row_idx]); row_gpios[row_idx]);
goto err2; goto err2;
} }
omap_set_gpio_direction(row_gpios[row_idx], 1); gpio_direction_input(row_gpios[row_idx]);
} }
} else { } else {
col_idx = 0; col_idx = 0;
...@@ -418,10 +415,10 @@ static int __init omap_kp_probe(struct platform_device *pdev) ...@@ -418,10 +415,10 @@ static int __init omap_kp_probe(struct platform_device *pdev)
device_remove_file(&pdev->dev, &dev_attr_enable); device_remove_file(&pdev->dev, &dev_attr_enable);
err2: err2:
for (i = row_idx - 1; i >=0; i--) for (i = row_idx - 1; i >=0; i--)
omap_free_gpio(row_gpios[i]); gpio_free(row_gpios[i]);
err1: err1:
for (i = col_idx - 1; i >=0; i--) for (i = col_idx - 1; i >=0; i--)
omap_free_gpio(col_gpios[i]); gpio_free(col_gpios[i]);
kfree(omap_kp); kfree(omap_kp);
input_free_device(input_dev); input_free_device(input_dev);
...@@ -438,9 +435,9 @@ static int omap_kp_remove(struct platform_device *pdev) ...@@ -438,9 +435,9 @@ static int omap_kp_remove(struct platform_device *pdev)
if (cpu_is_omap24xx()) { if (cpu_is_omap24xx()) {
int i; int i;
for (i = 0; i < omap_kp->cols; i++) for (i = 0; i < omap_kp->cols; i++)
omap_free_gpio(col_gpios[i]); gpio_free(col_gpios[i]);
for (i = 0; i < omap_kp->rows; i++) { for (i = 0; i < omap_kp->rows; i++) {
omap_free_gpio(row_gpios[i]); gpio_free(row_gpios[i]);
free_irq(OMAP_GPIO_IRQ(row_gpios[i]), 0); free_irq(OMAP_GPIO_IRQ(row_gpios[i]), 0);
} }
} else { } else {
......
...@@ -145,7 +145,7 @@ static void ams_delta_hwcontrol(struct mtd_info *mtd, int cmd, ...@@ -145,7 +145,7 @@ static void ams_delta_hwcontrol(struct mtd_info *mtd, int cmd,
static int ams_delta_nand_ready(struct mtd_info *mtd) static int ams_delta_nand_ready(struct mtd_info *mtd)
{ {
return omap_get_gpio_datain(AMS_DELTA_GPIO_PIN_NAND_RB); return gpio_get_value(AMS_DELTA_GPIO_PIN_NAND_RB);
} }
/* /*
...@@ -185,7 +185,7 @@ static int __init ams_delta_init(void) ...@@ -185,7 +185,7 @@ static int __init ams_delta_init(void)
this->read_buf = ams_delta_read_buf; this->read_buf = ams_delta_read_buf;
this->verify_buf = ams_delta_verify_buf; this->verify_buf = ams_delta_verify_buf;
this->cmd_ctrl = ams_delta_hwcontrol; this->cmd_ctrl = ams_delta_hwcontrol;
if (!omap_request_gpio(AMS_DELTA_GPIO_PIN_NAND_RB)) { if (gpio_request(AMS_DELTA_GPIO_PIN_NAND_RB, "nand_rdy") == 0) {
this->dev_ready = ams_delta_nand_ready; this->dev_ready = ams_delta_nand_ready;
} else { } else {
this->dev_ready = NULL; this->dev_ready = NULL;
......
...@@ -32,43 +32,43 @@ static int innovator1610_panel_init(struct lcd_panel *panel, ...@@ -32,43 +32,43 @@ static int innovator1610_panel_init(struct lcd_panel *panel,
{ {
int r = 0; int r = 0;
if (omap_request_gpio(14)) { if (gpio_request(14, "lcd_en0")) {
pr_err(MODULE_NAME ": can't request GPIO 14\n"); pr_err(MODULE_NAME ": can't request GPIO 14\n");
r = -1; r = -1;
goto exit; goto exit;
} }
if (omap_request_gpio(15)) { if (gpio_request(15, "lcd_en1")) {
pr_err(MODULE_NAME ": can't request GPIO 15\n"); pr_err(MODULE_NAME ": can't request GPIO 15\n");
omap_free_gpio(14); gpio_free(14);
r = -1; r = -1;
goto exit; goto exit;
} }
/* configure GPIO(14, 15) as outputs */ /* configure GPIO(14, 15) as outputs */
omap_set_gpio_direction(14, 0); gpio_direction_output(14, 0);
omap_set_gpio_direction(15, 0); gpio_direction_output(15, 0);
exit: exit:
return r; return r;
} }
static void innovator1610_panel_cleanup(struct lcd_panel *panel) static void innovator1610_panel_cleanup(struct lcd_panel *panel)
{ {
omap_free_gpio(15); gpio_free(15);
omap_free_gpio(14); gpio_free(14);
} }
static int innovator1610_panel_enable(struct lcd_panel *panel) static int innovator1610_panel_enable(struct lcd_panel *panel)
{ {
/* set GPIO14 and GPIO15 high */ /* set GPIO14 and GPIO15 high */
omap_set_gpio_dataout(14, 1); gpio_set_value(14, 1);
omap_set_gpio_dataout(15, 1); gpio_set_value(15, 1);
return 0; return 0;
} }
static void innovator1610_panel_disable(struct lcd_panel *panel) static void innovator1610_panel_disable(struct lcd_panel *panel)
{ {
/* set GPIO13, GPIO14 and GPIO15 low */ /* set GPIO13, GPIO14 and GPIO15 low */
omap_set_gpio_dataout(14, 0); gpio_set_value(14, 0);
omap_set_gpio_dataout(15, 0); gpio_set_value(15, 0);
} }
static unsigned long innovator1610_panel_get_caps(struct lcd_panel *panel) static unsigned long innovator1610_panel_get_caps(struct lcd_panel *panel)
......
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
static int osk_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) static int osk_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev)
{ {
/* gpio2 was allocated in board init */
return 0; return 0;
} }
...@@ -47,11 +48,8 @@ static int osk_panel_enable(struct lcd_panel *panel) ...@@ -47,11 +48,8 @@ static int osk_panel_enable(struct lcd_panel *panel)
/* Set PWL level */ /* Set PWL level */
omap_writeb(0xFF, OMAP_PWL_ENABLE); omap_writeb(0xFF, OMAP_PWL_ENABLE);
/* configure GPIO2 as output */ /* set GPIO2 high (lcd power enabled) */
omap_set_gpio_direction(2, 0); gpio_set_value(2, 1);
/* set GPIO2 high */
omap_set_gpio_dataout(2, 1);
return 0; return 0;
} }
...@@ -65,7 +63,7 @@ static void osk_panel_disable(struct lcd_panel *panel) ...@@ -65,7 +63,7 @@ static void osk_panel_disable(struct lcd_panel *panel)
omap_writeb(0x00, OMAP_PWL_CLK_ENABLE); omap_writeb(0x00, OMAP_PWL_CLK_ENABLE);
/* set GPIO2 low */ /* set GPIO2 low */
omap_set_gpio_dataout(2, 0); gpio_set_value(2, 0);
} }
static unsigned long osk_panel_get_caps(struct lcd_panel *panel) static unsigned long osk_panel_get_caps(struct lcd_panel *panel)
......
...@@ -81,21 +81,21 @@ static void epson_sendbyte(int flag, unsigned char byte) ...@@ -81,21 +81,21 @@ static void epson_sendbyte(int flag, unsigned char byte)
int i, shifter = 0x80; int i, shifter = 0x80;
if (!flag) if (!flag)
omap_set_gpio_dataout(_A_LCD_SSC_A0, 0); gpio_set_value(_A_LCD_SSC_A0, 0);
mdelay(2); mdelay(2);
omap_set_gpio_dataout(A_LCD_SSC_RD, 1); gpio_set_value(A_LCD_SSC_RD, 1);
omap_set_gpio_dataout(A_LCD_SSC_SD, flag); gpio_set_value(A_LCD_SSC_SD, flag);
OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200);
OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202);
for (i = 0; i < 8; i++) { for (i = 0; i < 8; i++) {
OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200); OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2200);
omap_set_gpio_dataout(A_LCD_SSC_SD, shifter & byte); gpio_set_value(A_LCD_SSC_SD, shifter & byte);
OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202); OMAP_MCBSP_WRITE(OMAP1510_MCBSP3_BASE, PCR0, 0x2202);
shifter >>= 1; shifter >>= 1;
} }
omap_set_gpio_dataout(_A_LCD_SSC_A0, 1); gpio_set_value(_A_LCD_SSC_A0, 1);
} }
static void init_system(void) static void init_system(void)
...@@ -107,25 +107,18 @@ static void init_system(void) ...@@ -107,25 +107,18 @@ static void init_system(void)
static void setup_GPIO(void) static void setup_GPIO(void)
{ {
/* new wave */ /* new wave */
omap_request_gpio(A_LCD_SSC_RD); gpio_request(A_LCD_SSC_RD, "lcd_ssc_rd");
omap_request_gpio(A_LCD_SSC_SD); gpio_request(A_LCD_SSC_SD, "lcd_ssc_sd");
omap_request_gpio(_A_LCD_RESET); gpio_request(_A_LCD_RESET, "lcd_reset");
omap_request_gpio(_A_LCD_SSC_CS); gpio_request(_A_LCD_SSC_CS, "lcd_ssc_cs");
omap_request_gpio(_A_LCD_SSC_A0); gpio_request(_A_LCD_SSC_A0, "lcd_ssc_a0");
/* set all GPIOs to output */ /* set GPIOs to output, with initial data */
omap_set_gpio_direction(A_LCD_SSC_RD, 0); gpio_direction_output(A_LCD_SSC_RD, 1);
omap_set_gpio_direction(A_LCD_SSC_SD, 0); gpio_direction_output(A_LCD_SSC_SD, 0);
omap_set_gpio_direction(_A_LCD_RESET, 0); gpio_direction_output(_A_LCD_RESET, 0);
omap_set_gpio_direction(_A_LCD_SSC_CS, 0); gpio_direction_output(_A_LCD_SSC_CS, 1);
omap_set_gpio_direction(_A_LCD_SSC_A0, 0); gpio_direction_output(_A_LCD_SSC_A0, 1);
/* set GPIO data */
omap_set_gpio_dataout(A_LCD_SSC_RD, 1);
omap_set_gpio_dataout(A_LCD_SSC_SD, 0);
omap_set_gpio_dataout(_A_LCD_RESET, 0);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_A0, 1);
} }
static void display_init(void) static void display_init(void)
...@@ -139,61 +132,61 @@ static void display_init(void) ...@@ -139,61 +132,61 @@ static void display_init(void)
mdelay(2); mdelay(2);
/* reset LCD */ /* reset LCD */
omap_set_gpio_dataout(A_LCD_SSC_SD, 1); gpio_set_value(A_LCD_SSC_SD, 1);
epson_sendbyte(0, 0x25); epson_sendbyte(0, 0x25);
omap_set_gpio_dataout(_A_LCD_RESET, 0); gpio_set_value(_A_LCD_RESET, 0);
mdelay(10); mdelay(10);
omap_set_gpio_dataout(_A_LCD_RESET, 1); gpio_set_value(_A_LCD_RESET, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
mdelay(2); mdelay(2);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD, phase 1 */ /* init LCD, phase 1 */
epson_sendbyte(0, 0xCA); epson_sendbyte(0, 0xCA);
for (i = 0; i < 10; i++) for (i = 0; i < 10; i++)
epson_sendbyte(1, INIT_1[i]); epson_sendbyte(1, INIT_1[i]);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 2 */ /* init LCD phase 2 */
epson_sendbyte(0, 0xCB); epson_sendbyte(0, 0xCB);
for (i = 0; i < 125; i++) for (i = 0; i < 125; i++)
epson_sendbyte(1, INIT_2[i]); epson_sendbyte(1, INIT_2[i]);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 2a */ /* init LCD phase 2a */
epson_sendbyte(0, 0xCC); epson_sendbyte(0, 0xCC);
for (i = 0; i < 14; i++) for (i = 0; i < 14; i++)
epson_sendbyte(1, INIT_3[i]); epson_sendbyte(1, INIT_3[i]);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 3 */ /* init LCD phase 3 */
epson_sendbyte(0, 0xBC); epson_sendbyte(0, 0xBC);
epson_sendbyte(1, 0x08); epson_sendbyte(1, 0x08);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 4 */ /* init LCD phase 4 */
epson_sendbyte(0, 0x07); epson_sendbyte(0, 0x07);
epson_sendbyte(1, 0x05); epson_sendbyte(1, 0x05);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 5 */ /* init LCD phase 5 */
epson_sendbyte(0, 0x94); epson_sendbyte(0, 0x94);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 6 */ /* init LCD phase 6 */
epson_sendbyte(0, 0xC6); epson_sendbyte(0, 0xC6);
epson_sendbyte(1, 0x80); epson_sendbyte(1, 0x80);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
mdelay(100); /* used to be 1000 */ mdelay(100); /* used to be 1000 */
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 7 */ /* init LCD phase 7 */
epson_sendbyte(0, 0x16); epson_sendbyte(0, 0x16);
...@@ -201,8 +194,8 @@ static void display_init(void) ...@@ -201,8 +194,8 @@ static void display_init(void)
epson_sendbyte(1, 0x00); epson_sendbyte(1, 0x00);
epson_sendbyte(1, 0xB1); epson_sendbyte(1, 0xB1);
epson_sendbyte(1, 0x00); epson_sendbyte(1, 0x00);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 8 */ /* init LCD phase 8 */
epson_sendbyte(0, 0x76); epson_sendbyte(0, 0x76);
...@@ -210,12 +203,12 @@ static void display_init(void) ...@@ -210,12 +203,12 @@ static void display_init(void)
epson_sendbyte(1, 0x00); epson_sendbyte(1, 0x00);
epson_sendbyte(1, 0xDB); epson_sendbyte(1, 0xDB);
epson_sendbyte(1, 0x00); epson_sendbyte(1, 0x00);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
/* init LCD phase 9 */ /* init LCD phase 9 */
epson_sendbyte(0, 0xAF); epson_sendbyte(0, 0xAF);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
} }
static int sx1_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev) static int sx1_panel_init(struct lcd_panel *panel, struct omapfb_device *fbdev)
...@@ -231,18 +224,18 @@ static void sx1_panel_disable(struct lcd_panel *panel) ...@@ -231,18 +224,18 @@ static void sx1_panel_disable(struct lcd_panel *panel)
{ {
printk(KERN_INFO "SX1: LCD panel disable\n"); printk(KERN_INFO "SX1: LCD panel disable\n");
sx1_setmmipower(0); sx1_setmmipower(0);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
epson_sendbyte(0, 0x25); epson_sendbyte(0, 0x25);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
epson_sendbyte(0, 0xAE); epson_sendbyte(0, 0xAE);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
mdelay(100); mdelay(100);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 0); gpio_set_value(_A_LCD_SSC_CS, 0);
epson_sendbyte(0, 0x95); epson_sendbyte(0, 0x95);
omap_set_gpio_dataout(_A_LCD_SSC_CS, 1); gpio_set_value(_A_LCD_SSC_CS, 1);
} }
static int sx1_panel_enable(struct lcd_panel *panel) static int sx1_panel_enable(struct lcd_panel *panel)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册