summaryrefslogtreecommitdiff
path: root/drivers/misc/ti-st/st_kim.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/ti-st/st_kim.c')
-rw-r--r--drivers/misc/ti-st/st_kim.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index 154cee0e5afc..5996b934abf0 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -35,6 +35,7 @@
#include <linux/skbuff.h>
#include <linux/ti_wilink_st.h>
+#include <linux/serial_core.h>
#define MAX_ST_DEVICES 3 /* Imagine 1 on each UART for now */
@@ -450,8 +451,8 @@ long st_kim_start(void *kim_data)
do {
/* platform specific enabling code here */
- /*if (pdata->chip_enable)
- pdata->chip_enable();*/
+ if (pdata->chip_enable)
+ pdata->chip_enable();
/* Configure BT nShutdown to HIGH state */
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
@@ -516,6 +517,8 @@ long st_kim_stop(void *kim_data)
{
long err = 0;
struct kim_data_s *kim_gdata = (struct kim_data_s *)kim_data;
+ struct ti_st_plat_data *pdata =
+ kim_gdata->kim_pdev->dev.platform_data;
INIT_COMPLETION(kim_gdata->ldisc_installed);
@@ -543,6 +546,9 @@ long st_kim_stop(void *kim_data)
mdelay(1);
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
+ /* platform specific disable */
+ if (pdata->chip_disable)
+ pdata->chip_disable();
return err;
}
@@ -777,10 +783,31 @@ static int kim_remove(struct platform_device *pdev)
return 0;
}
+static unsigned long retry_suspend;
+
int kim_suspend(struct platform_device *pdev, pm_message_t state)
{
struct ti_st_plat_data *pdata = pdev->dev.platform_data;
int ret;
+ struct kim_data_s *kim_gdata;
+ struct st_data_s *core_data;
+ kim_gdata = dev_get_drvdata(&pdev->dev);
+ core_data = kim_gdata->core_data;
+ struct uart_state *uart_state;
+ struct uart_port *uport;
+
+
+
+ if (st_ll_getstate(core_data) != ST_LL_INVALID) {
+ uart_state = core_data->tty->driver_data;
+ uport = uart_state->uart_port;
+#ifdef CONFIG_BT_TIBLUESLEEP
+ pr_info(" Bluesleep Start");
+ bluesleep_start(uport);
+#endif
+
+
+ }
if (pdata->suspend) {
ret = pdata->suspend(pdev, state);