summaryrefslogtreecommitdiff
path: root/recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch
diff options
context:
space:
mode:
Diffstat (limited to 'recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch')
-rw-r--r--recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch85
1 files changed, 85 insertions, 0 deletions
diff --git a/recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch b/recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch
new file mode 100644
index 0000000000..b8cb2fa276
--- /dev/null
+++ b/recipes/linux/linux-openmoko-2.6.34/0020-GTA02-bt-remember-state-of-bluetooth-in-variable.patch
@@ -0,0 +1,85 @@
+From 67a15139d71019e8f2ad8a566f72f28cf52f7a1f Mon Sep 17 00:00:00 2001
+From: Radek Polak <psonek2@seznam.cz>
+Date: Tue, 21 Sep 2010 20:03:14 +0200
+Subject: [PATCH 20/20] GTA02 bt - remember state of bluetooth in variable
+
+Reading bt status before suspend for some reason does not work. It
+always resumes with bluetooth turned off.
+
+This patch remembers if bluetooth is switched on/off in variable
+and after resume bluetooth ends up in the same state as was before
+suspend.
+---
+ arch/arm/mach-s3c2440/gta02-pm-bt.c | 18 +++++++++++-------
+ 1 files changed, 11 insertions(+), 7 deletions(-)
+
+diff --git a/arch/arm/mach-s3c2440/gta02-pm-bt.c b/arch/arm/mach-s3c2440/gta02-pm-bt.c
+index 5cf35d8..1101411 100644
+--- a/arch/arm/mach-s3c2440/gta02-pm-bt.c
++++ b/arch/arm/mach-s3c2440/gta02-pm-bt.c
+@@ -56,7 +56,8 @@ static ssize_t bt_read(struct device *dev, struct device_attribute *attr,
+ }
+ }
+
+-static void __gta02_pm_bt_toggle_radio(struct device *dev, unsigned int on)
++static void __gta02_pm_bt_toggle_radio(struct device *dev, unsigned int on,
++ bool remember_state)
+ {
+ struct gta02_pm_bt_data *bt_data = dev_get_drvdata(dev);
+
+@@ -75,6 +76,9 @@ static void __gta02_pm_bt_toggle_radio(struct device *dev, unsigned int on)
+ }
+
+ s3c2410_gpio_setpin(GTA02_GPIO_BT_EN, on);
++
++ if (remember_state)
++ bt_data->pre_resume_state = on;
+ }
+
+
+@@ -82,7 +86,7 @@ static int bt_rfkill_set_block(void *data, bool blocked)
+ {
+ struct device *dev = data;
+
+- __gta02_pm_bt_toggle_radio(dev, !blocked);
++ __gta02_pm_bt_toggle_radio(dev, !blocked, true);
+
+ return 0;
+ }
+@@ -101,7 +105,7 @@ static ssize_t bt_write(struct device *dev, struct device_attribute *attr,
+ if (!strcmp(attr->attr.name, "power_on")) {
+ rfkill_set_sw_state(bt_data->rfkill, on ? 1 : 0);
+
+- __gta02_pm_bt_toggle_radio(dev, on);
++ __gta02_pm_bt_toggle_radio(dev, on, true);
+ } else if (!strcmp(attr->attr.name, "reset")) {
+ /* reset is low-active, so we need to invert */
+ s3c2410_gpio_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
+@@ -116,12 +120,12 @@ static DEVICE_ATTR(reset, 0644, bt_read, bt_write);
+ #ifdef CONFIG_PM
+ static int gta02_bt_suspend(struct platform_device *pdev, pm_message_t state)
+ {
+- struct gta02_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev);
++/* struct gta02_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev); */
+
+ dev_dbg(&pdev->dev, DRVMSG ": suspending\n");
+
+- bt_data->pre_resume_state = s3c2410_gpio_getpin(GTA02_GPIO_BT_EN);
+- __gta02_pm_bt_toggle_radio(&pdev->dev, 0);
++ /* bt_data->pre_resume_state = s3c2410_gpio_getpin(GTA02_GPIO_BT_EN); */
++ __gta02_pm_bt_toggle_radio(&pdev->dev, 0, false);
+
+ return 0;
+ }
+@@ -131,7 +135,7 @@ static int gta02_bt_resume(struct platform_device *pdev)
+ struct gta02_pm_bt_data *bt_data = dev_get_drvdata(&pdev->dev);
+ dev_dbg(&pdev->dev, DRVMSG ": resuming\n");
+
+- __gta02_pm_bt_toggle_radio(&pdev->dev, bt_data->pre_resume_state);
++ __gta02_pm_bt_toggle_radio(&pdev->dev, bt_data->pre_resume_state, false);
+ return 0;
+ }
+ #else
+--
+1.7.3
+