diff options
author | x0099048 <x0099048@ti.com> | 2011-08-17 12:08:07 -0500 |
---|---|---|
committer | Dan Murphy <dmurphy@ti.com> | 2011-09-28 07:37:16 -0500 |
commit | d21ab504e1374ed288a464a0bd4c3c8dd34000f6 (patch) | |
tree | e01f55a47f4299fd10f6a3bd6a12319d66a75150 /drivers/misc/ti-st | |
parent | 14db12fae6d79e0241f248f05905fe37154db63a (diff) | |
download | kernel_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.c | 4 | ||||
-rw-r--r-- | drivers/misc/ti-st/st_ll.c | 36 |
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 { |