mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
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:
committed by
mobile promotions
parent
a662c74302
commit
8b4674420e
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user