#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>
}
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);
- if (direction)
+ if (direction) {
gpio_direction_input(sw->gpio);
- else
- gpio_direction_output(sw->gpio, true);
+ 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);
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;
}
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);