#include <linux/platform_device.h>
#include <linux/timer.h>
#include <linux/err.h>
+#include <linux/gpio.h>
#include <mach/hardware.h>
-#include <mach/gpio.h>
#include <mach/irqs.h>
#include <mach/mux.h>
#include <mach/board.h>
if (!sw->both_edges) {
if (gpio_get_value(sw->gpio))
- set_irq_type(OMAP_GPIO_IRQ(sw->gpio), IRQ_TYPE_EDGE_FALLING);
+ set_irq_type(gpio_to_irq(sw->gpio), IRQ_TYPE_EDGE_FALLING);
else
- set_irq_type(OMAP_GPIO_IRQ(sw->gpio), IRQ_TYPE_EDGE_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);
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);