#include <linux/platform_device.h>
#include <linux/timer.h>
#include <linux/err.h>
-#include <asm/arch/hardware.h>
-#include <asm/arch/gpio.h>
-#include <asm/arch/irqs.h>
-#include <asm/arch/mux.h>
-#include <asm/arch/board.h>
-#include <asm/arch/gpio-switch.h>
+#include <linux/gpio.h>
+#include <mach/hardware.h>
+#include <mach/irqs.h>
+#include <mach/mux.h>
+#include <mach/board.h>
+#include <mach/gpio-switch.h>
struct gpio_switch {
char name[14];
{
int state;
- state = omap_get_gpio_datain(sw->gpio);
+ state = gpio_get_value(sw->gpio);
if (sw->flags & OMAP_GPIO_SWITCH_FLAG_INVERTED)
state = !state;
if (sw->flags & OMAP_GPIO_SWITCH_FLAG_INVERTED)
enable = !enable;
- omap_set_gpio_dataout(sw->gpio, enable);
+ gpio_set_value(sw->gpio, enable);
return count;
}
int state;
if (!sw->both_edges) {
- if (omap_get_gpio_datain(sw->gpio))
- set_irq_type(OMAP_GPIO_IRQ(sw->gpio), IRQT_FALLING);
+ if (gpio_get_value(sw->gpio))
+ set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_FALLING);
else
- set_irq_type(OMAP_GPIO_IRQ(sw->gpio), IRQT_RISING);
+ set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_RISING);
}
state = gpio_sw_get_state(sw);
}
dev_set_drvdata(&sw->pdev.dev, sw);
- r = omap_request_gpio(sw->gpio);
+ r = gpio_request(sw->gpio, sw->name);
if (r < 0) {
platform_device_unregister(&sw->pdev);
return r;
/* input: 1, output: 0 */
direction = !(sw->flags & OMAP_GPIO_SWITCH_FLAG_OUTPUT);
- omap_set_gpio_direction(sw->gpio, direction);
+ if (direction) {
+ gpio_direction_input(sw->gpio);
+ sw->state = gpio_sw_get_state(sw);
+ } else {
+ int state = sw->state = !!(sw->flags &
+ OMAP_GPIO_SWITCH_FLAG_OUTPUT_INIT_ACTIVE);
- sw->state = gpio_sw_get_state(sw);
+ if (sw->flags & OMAP_GPIO_SWITCH_FLAG_INVERTED)
+ state = !state;
+ gpio_direction_output(sw->gpio, state);
+ }
r = 0;
r |= device_create_file(&sw->pdev.dev, &dev_attr_state);
trigger = IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING;
sw->both_edges = 1;
} else {
- if (omap_get_gpio_datain(sw->gpio))
+ if (gpio_get_value(sw->gpio))
trigger = IRQF_TRIGGER_FALLING;
else
trigger = IRQF_TRIGGER_RISING;
}
- r = request_irq(OMAP_GPIO_IRQ(sw->gpio), gpio_sw_irq_handler,
+ r = request_irq(gpio_to_irq(sw->gpio), gpio_sw_irq_handler,
IRQF_SHARED | trigger, sw->name, sw);
if (r < 0) {
printk(KERN_ERR "gpio-switch: request_irq() failed "
"for GPIO %d\n", sw->gpio);
platform_device_unregister(&sw->pdev);
- omap_free_gpio(sw->gpio);
+ gpio_free(sw->gpio);
return r;
}
flush_scheduled_work();
del_timer_sync(&sw->timer);
- free_irq(OMAP_GPIO_IRQ(sw->gpio), sw);
+ free_irq(gpio_to_irq(sw->gpio), sw);
device_remove_file(&sw->pdev.dev, &dev_attr_state);
device_remove_file(&sw->pdev.dev, &dev_attr_type);
device_remove_file(&sw->pdev.dev, &dev_attr_direction);
platform_device_unregister(&sw->pdev);
- omap_free_gpio(sw->gpio);
+ gpio_free(sw->gpio);
old = sw;
}
kfree(old);
list_for_each_entry(sw, &gpio_switches, node) {
int state;
- state = omap_get_gpio_datain(sw->gpio);
+ state = gpio_get_value(sw->gpio);
if (sw->flags & OMAP_GPIO_SWITCH_FLAG_INVERTED)
state = !state;
if (sw->notify != NULL)