From 918125bfde6d8d681296e9f0dfce46da6c69ad43 Mon Sep 17 00:00:00 2001 From: Andy Green Date: Thu, 27 Nov 2008 18:52:10 +0000 Subject: fix-gta02-rfkill-balaji-uplevel.patch Sean McNeil's bt rfkill patch uplevelled for Balaji stuff on GTA02 Signed-off-by: Andy Green --- arch/arm/plat-s3c24xx/neo1973_pm_bt.c | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) (limited to 'arch/arm') diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_bt.c b/arch/arm/plat-s3c24xx/neo1973_pm_bt.c index 336c61e443c..d70ee3d0956 100644 --- a/arch/arm/plat-s3c24xx/neo1973_pm_bt.c +++ b/arch/arm/plat-s3c24xx/neo1973_pm_bt.c @@ -28,6 +28,7 @@ /* For GTA02 */ #include +#include #include @@ -76,6 +77,8 @@ static int bt_rfkill_toggle_radio(void *data, enum rfkill_state state) struct device *dev = data; unsigned long on = (state == RFKILL_STATE_ON); unsigned int vol; + struct gta01_pm_bt_data *bt_data; + struct regulator *regulator; if (machine_is_neo1973_gta01()) { /* if we are powering up, assert reset, then power, @@ -92,13 +95,23 @@ static int bt_rfkill_toggle_radio(void *data, enum rfkill_state state) } else if (machine_is_neo1973_gta02()) { if (s3c2410_gpio_getpin(GTA02_GPIO_BT_EN) == on) return 0; + + bt_data = dev_get_drvdata(dev); + BUG_ON(!bt_data || !bt_data->regulator); + regulator = bt_data->regulator; + neo1973_gpb_setpin(GTA02_GPIO_BT_EN, !on); - pcf50633_voltage_set(pcf50633_global, - PCF50633_REGULATOR_LDO4, on ? 3200 : 0); - pcf50633_onoff_set(pcf50633_global, - PCF50633_REGULATOR_LDO4, on); - vol = pcf50633_voltage_get(pcf50633_global, - PCF50633_REGULATOR_LDO4); + + if (on) { + if (!regulator_is_enabled(regulator)) + regulator_enable(regulator); + } else { + if (regulator_is_enabled(regulator)) + regulator_disable(regulator); + } + + vol = regulator_get_voltage(regulator); + dev_info(dev, "GTA02 Set PCF50633 LDO4 = %d\n", vol); neo1973_gpb_setpin(GTA02_GPIO_BT_EN, on); } @@ -208,6 +221,7 @@ static int __init gta01_bt_probe(struct platform_device *pdev) struct rfkill *rfkill; struct regulator *regulator; struct gta01_pm_bt_data *bt_data; + int ret; dev_info(&pdev->dev, DRVMSG ": starting\n"); @@ -243,7 +257,11 @@ static int __init gta01_bt_probe(struct platform_device *pdev) rfkill->state = -1; rfkill->toggle_radio = bt_rfkill_toggle_radio; - rfkill_register(rfkill); + ret = rfkill_register(rfkill); + if (ret) { + dev_err(&pdev->dev, "Failed to register rfkill\n"); + return ret; + } platform_set_drvdata(pdev, rfkill); @@ -274,7 +292,6 @@ static int gta01_bt_remove(struct platform_device *pdev) regulator_put(regulator); ->>>>>>> patched return 0; } -- cgit v1.2.3