diff options
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.patch | 85 |
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 + |