BT: deprecate support for of_gpio calls

deprecate support for of_gpio calls
use devm_gpiod calls instead

Bug 4387902

Signed-off-by: Prathamesh Shete <pshete@nvidia.com>
Change-Id: Ic81b5cf11a32f014f02290e2a7c84c50a3e26d6c
Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3043616
Reviewed-by: Revanth Kumar Uppala <ruppala@nvidia.com>
Reviewed-by: Jian-Min Liu <jianminl@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Reviewed-by: Jonathan Hunter <jonathanh@nvidia.com>
GVS: Gerrit_Virtual_Submit <buildbot_gerritrpt@nvidia.com>
Tested-by: Jian-Min Liu <jianminl@nvidia.com>
This commit is contained in:
Prathamesh Shete
2024-01-02 08:55:12 +00:00
committed by mobile promotions
parent a662c74302
commit 8b4674420e

View File

@@ -41,10 +41,10 @@
#define BT_WAKE 0x01 #define BT_WAKE 0x01
struct bluedroid_pm_data { struct bluedroid_pm_data {
int gpio_reset; struct gpio_desc *gpio_reset;
int gpio_shutdown; struct gpio_desc *gpio_shutdown;
int host_wake; struct gpio_desc *host_wake;
int ext_wake; struct gpio_desc *ext_wake;
int is_blocked; int is_blocked;
unsigned int resume_min_frequency; unsigned int resume_min_frequency;
unsigned long flags; unsigned long flags;
@@ -114,20 +114,20 @@ static irqreturn_t bluedroid_pm_hostwake_isr(int irq, void *dev_id)
return IRQ_HANDLED; return IRQ_HANDLED;
} }
static int bluedroid_pm_gpio_get_value(unsigned int gpio) static int bluedroid_pm_gpio_get_value(struct gpio_desc *gpio)
{ {
if (gpiod_cansleep(gpio_to_desc(gpio))) if (gpiod_cansleep(gpio))
return gpio_get_value_cansleep(gpio); return gpiod_get_value_cansleep(gpio);
else else
return gpio_get_value(gpio); return gpiod_get_value(gpio);
} }
static void bluedroid_pm_gpio_set_value(unsigned int gpio, int value) static void bluedroid_pm_gpio_set_value(struct gpio_desc *gpio, int value)
{ {
if (gpiod_cansleep(gpio_to_desc(gpio))) if (gpiod_cansleep(gpio))
gpiod_set_value_cansleep(gpio_to_desc(gpio), value); gpiod_set_value_cansleep(gpio, value);
else else
gpiod_set_value(gpio_to_desc(gpio), value); gpiod_set_value(gpio, value);
} }
/** /**
@@ -168,17 +168,17 @@ static int bluedroid_pm_rfkill_set_power(void *data, bool blocked)
mdelay(100); mdelay(100);
if (blocked) { if (blocked) {
if (gpio_is_valid(bluedroid_pm->gpio_shutdown)) if (bluedroid_pm->gpio_shutdown)
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_shutdown, 0); bluedroid_pm->gpio_shutdown, 0);
if (gpio_is_valid(bluedroid_pm->gpio_reset)) if (bluedroid_pm->gpio_reset)
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_reset, 0); bluedroid_pm->gpio_reset, 0);
if (bluedroid_pm->vdd_3v3) if (bluedroid_pm->vdd_3v3)
ret |= regulator_disable(bluedroid_pm->vdd_3v3); ret |= regulator_disable(bluedroid_pm->vdd_3v3);
if (bluedroid_pm->vdd_1v8) if (bluedroid_pm->vdd_1v8)
ret |= regulator_disable(bluedroid_pm->vdd_1v8); ret |= regulator_disable(bluedroid_pm->vdd_1v8);
if (gpio_is_valid(bluedroid_pm->ext_wake)) if (bluedroid_pm->ext_wake)
__pm_relax(&bluedroid_pm->wake_lock); __pm_relax(&bluedroid_pm->wake_lock);
if (bluedroid_pm->resume_min_frequency) if (bluedroid_pm->resume_min_frequency)
cpu_latency_qos_remove_request(&bluedroid_pm->resume_cpu_freq_req); cpu_latency_qos_remove_request(&bluedroid_pm->resume_cpu_freq_req);
@@ -187,10 +187,10 @@ static int bluedroid_pm_rfkill_set_power(void *data, bool blocked)
ret |= regulator_enable(bluedroid_pm->vdd_3v3); ret |= regulator_enable(bluedroid_pm->vdd_3v3);
if (bluedroid_pm->vdd_1v8) if (bluedroid_pm->vdd_1v8)
ret |= regulator_enable(bluedroid_pm->vdd_1v8); ret |= regulator_enable(bluedroid_pm->vdd_1v8);
if (gpio_is_valid(bluedroid_pm->gpio_shutdown)) if (bluedroid_pm->gpio_shutdown)
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_shutdown, 1); bluedroid_pm->gpio_shutdown, 1);
if (gpio_is_valid(bluedroid_pm->gpio_reset)) if (bluedroid_pm->gpio_reset)
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_reset, 1); bluedroid_pm->gpio_reset, 1);
if (bluedroid_pm->resume_min_frequency) if (bluedroid_pm->resume_min_frequency)
@@ -344,10 +344,6 @@ static int bluedroid_pm_probe(struct platform_device *pdev)
int ret; int ret;
bool enable = false; /* off */ bool enable = false; /* off */
struct device_node *node; struct device_node *node;
#if defined(NV_OF_GET_NAMED_GPIO_FLAGS_PRESENT) /* Linux 6.2 */
enum of_gpio_flags of_flags;
#endif
unsigned long flags;
bluedroid_pm = devm_kzalloc(&pdev->dev, sizeof(*bluedroid_pm), GFP_KERNEL); bluedroid_pm = devm_kzalloc(&pdev->dev, sizeof(*bluedroid_pm), GFP_KERNEL);
if (!bluedroid_pm) if (!bluedroid_pm)
@@ -370,58 +366,55 @@ static int bluedroid_pm_probe(struct platform_device *pdev)
} }
} }
#if defined(NV_OF_GET_NAMED_GPIO_FLAGS_PRESENT) /* Linux 6.2 */
bluedroid_pm->gpio_reset = bluedroid_pm->gpio_reset =
of_get_named_gpio_flags(node, "bluedroid_pm,reset-gpio", devm_gpiod_get_optional(&pdev->dev, "bluedroid_pm,reset",
0, &of_flags); GPIOD_OUT_HIGH);
#else
bluedroid_pm->gpio_reset = if (PTR_ERR(bluedroid_pm->gpio_reset) == -EPROBE_DEFER)
of_get_named_gpio(node, "bluedroid_pm,reset-gpio", 0); BDP_DBG("Reset gpio get failure.\n");
#endif
bluedroid_pm->gpio_shutdown = bluedroid_pm->gpio_shutdown =
of_get_named_gpio(node, "bluedroid_pm,shutdown-gpio", 0); devm_gpiod_get_optional(&pdev->dev, "bluedroid_pm,shutdown",
GPIOD_ASIS);
if (PTR_ERR(bluedroid_pm->gpio_shutdown) == -EPROBE_DEFER)
BDP_DBG("shutdown gpio get failure.\n");
bluedroid_pm->host_wake = bluedroid_pm->host_wake =
of_get_named_gpio(node, "bluedroid_pm,host-wake-gpio", 0); devm_gpiod_get_optional(&pdev->dev, "bluedroid_pm,host-wake",
GPIOD_ASIS);
if (PTR_ERR(bluedroid_pm->host_wake) == -EPROBE_DEFER)
BDP_DBG("host_wake gpio get failure.\n");
bluedroid_pm->host_wake_irq = platform_get_irq(pdev, 0); bluedroid_pm->host_wake_irq = platform_get_irq(pdev, 0);
bluedroid_pm->ext_wake = bluedroid_pm->ext_wake =
of_get_named_gpio(node, "bluedroid_pm,ext-wake-gpio", 0); devm_gpiod_get_optional(&pdev->dev, "bluedroid_pm,ext-wake",
GPIOD_ASIS);
if (PTR_ERR(bluedroid_pm->ext_wake) == -EPROBE_DEFER)
BDP_DBG("ext_wake gpio get failure.\n");
/* Update resume_min_frequency, if pdata is passed from board files */ /* Update resume_min_frequency, if pdata is passed from board files */
of_property_read_u32(node, "resume_min_frequency", of_property_read_u32(node, "resume_min_frequency",
&bluedroid_pm->resume_min_frequency); &bluedroid_pm->resume_min_frequency);
if (gpio_is_valid(bluedroid_pm->gpio_reset)) { if (bluedroid_pm->gpio_reset)
#if defined(NV_OF_GET_NAMED_GPIO_FLAGS_PRESENT) /* Linux 6.2 */ gpiod_direction_output(bluedroid_pm->gpio_reset, enable);
flags = (of_flags == OF_GPIO_ACTIVE_LOW) ? GPIOF_ACTIVE_LOW : 0; else
#else
flags = 0;
#endif
ret = gpio_request_one(bluedroid_pm->gpio_reset, flags,
"reset_gpio");
if (ret) {
BDP_ERR("Failed to get reset gpio\n");
goto free_bluedriod_pm;
}
gpio_direction_output(bluedroid_pm->gpio_reset, enable);
} else
BDP_DBG("Reset gpio not registered.\n"); BDP_DBG("Reset gpio not registered.\n");
if (gpio_is_valid(bluedroid_pm->gpio_shutdown)) { if (bluedroid_pm->gpio_shutdown)
ret = gpio_request(bluedroid_pm->gpio_shutdown, gpiod_direction_output(bluedroid_pm->gpio_shutdown, enable);
"shutdown_gpio"); else
if (ret) {
BDP_ERR("Failed to get shutdown gpio\n");
goto free_gpio_reset;
}
gpio_direction_output(bluedroid_pm->gpio_shutdown, enable);
} else
BDP_DBG("shutdown gpio not registered\n"); BDP_DBG("shutdown gpio not registered\n");
/* /*
* make sure at-least one of the GPIO or regulators avaiable to * make sure at-least one of the GPIO or regulators avaiable to
* register with rfkill is defined * register with rfkill is defined
*/ */
if ((gpio_is_valid(bluedroid_pm->gpio_reset)) || if ((bluedroid_pm->gpio_reset) ||
(gpio_is_valid(bluedroid_pm->gpio_shutdown)) || (bluedroid_pm->gpio_shutdown) ||
bluedroid_pm->vdd_1v8 || bluedroid_pm->vdd_3v3) { bluedroid_pm->vdd_1v8 || bluedroid_pm->vdd_3v3) {
rfkill = rfkill_alloc(pdev->name, &pdev->dev, rfkill = rfkill_alloc(pdev->name, &pdev->dev,
RFKILL_TYPE_BLUETOOTH, &bluedroid_pm_rfkill_ops, RFKILL_TYPE_BLUETOOTH, &bluedroid_pm_rfkill_ops,
@@ -441,14 +434,9 @@ static int bluedroid_pm_probe(struct platform_device *pdev)
bluedroid_pm->rfkill = rfkill; bluedroid_pm->rfkill = rfkill;
} }
if (gpio_is_valid(bluedroid_pm->host_wake)) { if (bluedroid_pm->host_wake) {
ret = gpio_request(bluedroid_pm->host_wake, "bt_host_wake");
if (ret) {
BDP_ERR("Failed to get host_wake gpio\n");
goto free_rfkill_reg;
}
/* configure host_wake as input */ /* configure host_wake as input */
gpio_direction_input(bluedroid_pm->host_wake); gpiod_direction_input(bluedroid_pm->host_wake);
} else } else
BDP_DBG("gpio_host_wake not registered\n"); BDP_DBG("gpio_host_wake not registered\n");
@@ -465,14 +453,9 @@ static int bluedroid_pm_probe(struct platform_device *pdev)
} else } else
BDP_DBG("host_wake not registered\n"); BDP_DBG("host_wake not registered\n");
if (gpio_is_valid(bluedroid_pm->ext_wake)) { if (bluedroid_pm->ext_wake) {
ret = gpio_request(bluedroid_pm->ext_wake, "bt_ext_wake");
if (ret) {
BDP_ERR("Failed to get ext_wake gpio\n");
goto free_host_wake_irq;
}
/* configure ext_wake as output mode*/ /* configure ext_wake as output mode*/
gpio_direction_output(bluedroid_pm->ext_wake, 1); gpiod_direction_output(bluedroid_pm->ext_wake, 1);
if (create_bt_proc_interface(bluedroid_pm)) { if (create_bt_proc_interface(bluedroid_pm)) {
BDP_ERR("Failed to create proc interface"); BDP_ERR("Failed to create proc interface");
goto free_ext_wake; goto free_ext_wake;
@@ -497,27 +480,15 @@ static int bluedroid_pm_probe(struct platform_device *pdev)
return 0; return 0;
free_ext_wake: free_ext_wake:
if (gpio_is_valid(bluedroid_pm->ext_wake))
gpio_free(bluedroid_pm->ext_wake);
free_host_wake_irq:
if (bluedroid_pm->host_wake_irq > -1) if (bluedroid_pm->host_wake_irq > -1)
free_irq(bluedroid_pm->host_wake_irq, bluedroid_pm); free_irq(bluedroid_pm->host_wake_irq, bluedroid_pm);
free_host_wake: free_host_wake:
if (gpio_is_valid(bluedroid_pm->host_wake))
gpio_free(bluedroid_pm->host_wake);
free_rfkill_reg:
if (bluedroid_pm->rfkill) if (bluedroid_pm->rfkill)
rfkill_unregister(bluedroid_pm->rfkill); rfkill_unregister(bluedroid_pm->rfkill);
free_rfkill_alloc: free_rfkill_alloc:
if (bluedroid_pm->rfkill) if (bluedroid_pm->rfkill)
rfkill_destroy(bluedroid_pm->rfkill); rfkill_destroy(bluedroid_pm->rfkill);
free_gpio_shutdown: free_gpio_shutdown:
if (gpio_is_valid(bluedroid_pm->gpio_shutdown))
gpio_free(bluedroid_pm->gpio_shutdown);
free_gpio_reset:
if (gpio_is_valid(bluedroid_pm->gpio_reset))
gpio_free(bluedroid_pm->gpio_reset);
free_bluedriod_pm:
if (bluedroid_pm->vdd_3v3) if (bluedroid_pm->vdd_3v3)
regulator_put(bluedroid_pm->vdd_3v3); regulator_put(bluedroid_pm->vdd_3v3);
if (bluedroid_pm->vdd_1v8) if (bluedroid_pm->vdd_1v8)
@@ -533,24 +504,17 @@ static int bluedroid_pm_remove(struct platform_device *pdev)
cancel_work_sync(&bluedroid_pm->work); cancel_work_sync(&bluedroid_pm->work);
if (bluedroid_pm->host_wake_irq > -1) if (bluedroid_pm->host_wake_irq > -1)
free_irq(bluedroid_pm->host_wake_irq, bluedroid_pm); free_irq(bluedroid_pm->host_wake_irq, bluedroid_pm);
if (gpio_is_valid(bluedroid_pm->host_wake)) if ((bluedroid_pm->ext_wake)) {
gpio_free(bluedroid_pm->host_wake);
if (gpio_is_valid(bluedroid_pm->ext_wake)) {
wakeup_source_destroy(&bluedroid_pm->wake_lock); wakeup_source_destroy(&bluedroid_pm->wake_lock);
gpio_free(bluedroid_pm->ext_wake);
remove_bt_proc_interface(); remove_bt_proc_interface();
del_timer(&bluedroid_pm_timer); del_timer(&bluedroid_pm_timer);
} }
if ((gpio_is_valid(bluedroid_pm->gpio_reset)) || if (((bluedroid_pm->gpio_reset)) ||
(gpio_is_valid(bluedroid_pm->gpio_shutdown)) || ((bluedroid_pm->gpio_shutdown)) ||
bluedroid_pm->vdd_1v8 || bluedroid_pm->vdd_3v3) { bluedroid_pm->vdd_1v8 || bluedroid_pm->vdd_3v3) {
rfkill_unregister(bluedroid_pm->rfkill); rfkill_unregister(bluedroid_pm->rfkill);
rfkill_destroy(bluedroid_pm->rfkill); rfkill_destroy(bluedroid_pm->rfkill);
} }
if (gpio_is_valid(bluedroid_pm->gpio_shutdown))
gpio_free(bluedroid_pm->gpio_shutdown);
if (gpio_is_valid(bluedroid_pm->gpio_reset))
gpio_free(bluedroid_pm->gpio_reset);
if (bluedroid_pm->vdd_3v3) if (bluedroid_pm->vdd_3v3)
regulator_put(bluedroid_pm->vdd_3v3); regulator_put(bluedroid_pm->vdd_3v3);
if (bluedroid_pm->vdd_1v8) if (bluedroid_pm->vdd_1v8)
@@ -608,10 +572,10 @@ static void bluedroid_pm_shutdown(struct platform_device *pdev)
cancel_work_sync(&bluedroid_pm->work); cancel_work_sync(&bluedroid_pm->work);
if (gpio_is_valid(bluedroid_pm->gpio_shutdown)) if ((bluedroid_pm->gpio_shutdown))
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_shutdown, 0); bluedroid_pm->gpio_shutdown, 0);
if (gpio_is_valid(bluedroid_pm->gpio_reset)) if ((bluedroid_pm->gpio_reset))
bluedroid_pm_gpio_set_value( bluedroid_pm_gpio_set_value(
bluedroid_pm->gpio_reset, 0); bluedroid_pm->gpio_reset, 0);
if (bluedroid_pm->vdd_3v3) if (bluedroid_pm->vdd_3v3)