summaryrefslogtreecommitdiff
path: root/arch/arm/mach-omap2/board-omap3h1-bluetooth.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-omap2/board-omap3h1-bluetooth.c')
-rw-r--r--arch/arm/mach-omap2/board-omap3h1-bluetooth.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/arch/arm/mach-omap2/board-omap3h1-bluetooth.c b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c
index 323ec99ac6b..84108a79258 100644
--- a/arch/arm/mach-omap2/board-omap3h1-bluetooth.c
+++ b/arch/arm/mach-omap2/board-omap3h1-bluetooth.c
@@ -36,16 +36,19 @@
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <asm/mach-types.h>
+#include <linux/platform_data/serial-omap.h>
#include "serial.h"
#include "board-omap3h1.h"
#include <linux/regulator/driver.h>
static void update_host_wake_locked(int);
+#define BT_RESET_GPIO 179
#define BT_REG_GPIO 180
#define BT_RESET_GPIO 179
#define BT_WAKE_GPIO 93
#define BT_HOST_WAKE_GPIO 11
+#define UART_PORT 1
static struct rfkill *bt_rfkill;
static struct regulator *clk32ksys_reg;
@@ -76,13 +79,14 @@ static int bcm20702_bt_rfkill_set_power(void *data, bool blocked)
gpio_set_value(BT_RESET_GPIO, 1);
gpio_set_value(BT_REG_GPIO, 1);
+ gpio_set_value(BT_RESET_GPIO, 1);
} else {
// Chip won't toggle host_wake after reset. Make sure
// we don't hold the wake_lock until chip wakes up again.
update_host_wake_locked(0);
-
- gpio_set_value(BT_RESET_GPIO, 0);
+
+ gpio_set_value(BT_RESET_GPIO, 0);
gpio_set_value(BT_REG_GPIO, 0);
if (clk32ksys_reg && bt_enabled)
regulator_disable(clk32ksys_reg);
@@ -104,13 +108,13 @@ static void set_wake_locked(int wake)
if (!wake)
wake_unlock(&bt_lpm.wake_lock);
- //if (!wake_uart_enabled && wake)
- //omap_uart_enable(2);
+ if (!wake_uart_enabled && wake)
+ omap_serial_ext_uart_enable(UART_PORT);
gpio_set_value(BT_WAKE_GPIO, wake);
- //if (wake_uart_enabled && !wake)
- //omap_uart_disable(2);
+ if (wake_uart_enabled && !wake)
+ omap_serial_ext_uart_disable(UART_PORT);
wake_uart_enabled = wake;
}
@@ -146,11 +150,11 @@ static void update_host_wake_locked(int host_wake)
if (host_wake) {
wake_lock(&bt_lpm.wake_lock);
if (!host_wake_uart_enabled) {
- //omap_uart_enable(2);
+ omap_serial_ext_uart_enable(UART_PORT);
}
} else {
if (host_wake_uart_enabled) {
- //omap_uart_disable(2);
+ omap_serial_ext_uart_disable(UART_PORT);
}
// Take a timed wakelock, so that upper layers can take it.
// The chipset deasserts the hostwake lock, when there is no
@@ -259,15 +263,16 @@ static int bcm20702_bluetooth_probe(struct platform_device *pdev)
int rc = 0;
int ret = 0;
- rc = gpio_request(BT_RESET_GPIO, "bcm20702_nreset_gpip");
+ rc = gpio_request(BT_RESET_GPIO, "bcm20702_nreset_gpip");
+
if (unlikely(rc)) {
return rc;
}
rc = gpio_request(BT_REG_GPIO, "bcm20702_nshutdown_gpio");
if (unlikely(rc)) {
- gpio_free(BT_RESET_GPIO);
- return rc;
+ gpio_free(BT_RESET_GPIO);
+ return rc;
}
clk32ksys_reg = regulator_get(0, "clk32ksys");