aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/misc/ti-st
diff options
context:
space:
mode:
authorx0099048 <x0099048@ti.com>2011-08-17 12:08:07 -0500
committerDan Murphy <dmurphy@ti.com>2011-09-28 07:37:16 -0500
commitd21ab504e1374ed288a464a0bd4c3c8dd34000f6 (patch)
treee01f55a47f4299fd10f6a3bd6a12319d66a75150 /drivers/misc/ti-st
parent14db12fae6d79e0241f248f05905fe37154db63a (diff)
downloadkernel_samsung_espresso10-d21ab504e1374ed288a464a0bd4c3c8dd34000f6.tar.gz
kernel_samsung_espresso10-d21ab504e1374ed288a464a0bd4c3c8dd34000f6.tar.bz2
kernel_samsung_espresso10-d21ab504e1374ed288a464a0bd4c3c8dd34000f6.zip
drivers: misc: ti-st: Added BT enable/disable hook
Added functionality to call UART get sync/put sync through pltform board file for run time PM adaptation. Change-Id: Ieb9676391b1472d84355615eef9ba442fcb5fd81 Signed-off-by: x0099048 <x0099048@ti.com>
Diffstat (limited to 'drivers/misc/ti-st')
-rw-r--r--drivers/misc/ti-st/st_kim.c4
-rw-r--r--drivers/misc/ti-st/st_ll.c36
2 files changed, 29 insertions, 11 deletions
diff --git a/drivers/misc/ti-st/st_kim.c b/drivers/misc/ti-st/st_kim.c
index 3a3580566df..7352fd8661a 100644
--- a/drivers/misc/ti-st/st_kim.c
+++ b/drivers/misc/ti-st/st_kim.c
@@ -451,7 +451,7 @@ long st_kim_start(void *kim_data)
do {
/* platform specific enabling code here */
if (pdata->chip_enable)
- pdata->chip_enable(kim_gdata);
+ pdata->chip_enable();
/* Configure BT nShutdown to HIGH state */
gpio_set_value(kim_gdata->nshutdown, GPIO_LOW);
@@ -547,7 +547,7 @@ long st_kim_stop(void *kim_data)
/* platform specific disable */
if (pdata->chip_disable)
- pdata->chip_disable(kim_gdata);
+ pdata->chip_disable();
return err;
}
diff --git a/drivers/misc/ti-st/st_ll.c b/drivers/misc/ti-st/st_ll.c
index 1ff460a8e9c..0a921bdae7a 100644
--- a/drivers/misc/ti-st/st_ll.c
+++ b/drivers/misc/ti-st/st_ll.c
@@ -55,17 +55,21 @@ static void ll_device_want_to_sleep(struct st_data_s *st_data)
kim_data = st_data->kim_data;
pdata = kim_data->kim_pdev->dev.platform_data;
if (pdata->chip_asleep)
- pdata->chip_asleep(NULL);
+ pdata->chip_asleep();
}
static void ll_device_want_to_wakeup(struct st_data_s *st_data)
{
- struct kim_data_s *kim_data;
- struct ti_st_plat_data *pdata;
+ struct kim_data_s *kim_data = st_data->kim_data;
+ struct ti_st_plat_data *pdata = kim_data->kim_pdev->dev.platform_data;
/* diff actions in diff states */
switch (st_data->ll_state) {
case ST_LL_ASLEEP:
+ /* communicate to platform about chip wakeup */
+ if (pdata->chip_awake)
+ pdata->chip_awake();
+
send_ll_cmd(st_data, LL_WAKE_UP_ACK); /* send wake_ack */
break;
case ST_LL_ASLEEP_TO_AWAKE:
@@ -81,14 +85,9 @@ static void ll_device_want_to_wakeup(struct st_data_s *st_data)
pr_err("duplicate wake_ind");
break;
}
+
/* update state */
st_data->ll_state = ST_LL_AWAKE;
-
- /* communicate to platform about chip wakeup */
- kim_data = st_data->kim_data;
- pdata = kim_data->kim_pdev->dev.platform_data;
- if (pdata->chip_asleep)
- pdata->chip_awake(NULL);
}
/**********************************************************************/
@@ -98,6 +97,12 @@ static void ll_device_want_to_wakeup(struct st_data_s *st_data)
* enable ST LL */
void st_ll_enable(struct st_data_s *ll)
{
+ struct kim_data_s *kim_data = ll->kim_data;
+ struct ti_st_plat_data *pdata = kim_data->kim_pdev->dev.platform_data;
+ /* communicate to platform about chip enable */
+ if (pdata->chip_enable)
+ pdata->chip_enable();
+
ll->ll_state = ST_LL_AWAKE;
}
@@ -105,13 +110,26 @@ void st_ll_enable(struct st_data_s *ll)
* disable ST LL */
void st_ll_disable(struct st_data_s *ll)
{
+ struct kim_data_s *kim_data = ll->kim_data;
+ struct ti_st_plat_data *pdata = kim_data->kim_pdev->dev.platform_data;
+ /* communicate to platform about chip disable */
+ if (pdata->chip_disable)
+ pdata->chip_disable();
+
ll->ll_state = ST_LL_INVALID;
}
/* called when ST Core wants to update the state */
void st_ll_wakeup(struct st_data_s *ll)
{
+ struct kim_data_s *kim_data = ll->kim_data;
+ struct ti_st_plat_data *pdata = kim_data->kim_pdev->dev.platform_data;
+
if (likely(ll->ll_state != ST_LL_AWAKE)) {
+ /* communicate to platform about chip wakeup */
+ if (pdata->chip_awake)
+ pdata->chip_awake();
+
send_ll_cmd(ll, LL_WAKE_UP_IND); /* WAKE_IND */
ll->ll_state = ST_LL_ASLEEP_TO_AWAKE;
} else {