On 24/04/2024 11:32, quic_zijuhu wrote: > On 4/24/2024 5:04 PM, Bartosz Golaszewski wrote: >> On Wed, 24 Apr 2024 07:07:05 +0200, Wren Turkal <wt@xxxxxxxxxxxxxxxx> said: >>> On 4/22/24 6:00 AM, Bartosz Golaszewski wrote: >>>> From: Bartosz Golaszewski <bartosz.golaszewski@xxxxxxxxxx> >>>> >>>> Any return value from gpiod_get_optional() other than a pointer to a >>>> GPIO descriptor or a NULL-pointer is an error and the driver should >>>> abort probing. That being said: commit 56d074d26c58 ("Bluetooth: hci_qca: >>>> don't use IS_ERR_OR_NULL() with gpiod_get_optional()") no longer sets >>>> power_ctrl_enabled on NULL-pointer returned by >>>> devm_gpiod_get_optional(). Restore this behavior but bail-out on errors. >>> >>> Nack. This patch does fixes neither the disable/re-enable problem nor >>> the warm boot problem. >>> >>> Zijun replied to this patch also with what I think is the proper >>> reasoning for why it doesn't fix my setup. >>> >> >> Indeed, I only addressed a single issue here and not the code under the >> default: label of the switch case. Sorry. >> >> Could you give the following diff a try? >> >> Bart >> >> diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c >> index 92fa20f5ac7d..0e98ad2c0c9d 100644 >> --- a/drivers/bluetooth/hci_qca.c >> +++ b/drivers/bluetooth/hci_qca.c >> @@ -2327,16 +2327,21 @@ static int qca_serdev_probe(struct >> serdev_device *serdev) >> (data->soc_type == QCA_WCN6750 || >> data->soc_type == QCA_WCN6855)) { >> dev_err(&serdev->dev, "failed to acquire BT_EN gpio\n"); >> - power_ctrl_enabled = false; >> + return PTR_ERR(qcadev->bt_en); >> } >> >> + if (!qcadev->bt_en) >> + power_ctrl_enabled = false; >> + >> qcadev->sw_ctrl = devm_gpiod_get_optional(&serdev->dev, "swctrl", >> GPIOD_IN); >> if (IS_ERR(qcadev->sw_ctrl) && >> (data->soc_type == QCA_WCN6750 || >> data->soc_type == QCA_WCN6855 || >> - data->soc_type == QCA_WCN7850)) >> - dev_warn(&serdev->dev, "failed to acquire SW_CTRL gpio\n"); >> + data->soc_type == QCA_WCN7850)) { >> + dev_err(&serdev->dev, "failed to acquire SW_CTRL gpio\n"); >> + return PTR_ERR(qcadev->sw_ctrl); >> + } >> >> qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL); >> if (IS_ERR(qcadev->susclk)) { >> @@ -2355,10 +2360,13 @@ static int qca_serdev_probe(struct >> serdev_device *serdev) >> qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable", >> GPIOD_OUT_LOW); >> if (IS_ERR(qcadev->bt_en)) { >> - dev_warn(&serdev->dev, "failed to acquire enable gpio\n"); >> - power_ctrl_enabled = false; >> + dev_err(&serdev->dev, "failed to acquire enable gpio\n"); >> + return PTR_ERR(qcadev->bt_en); >> } >> >> + if (!qcadev->bt_en) >> + power_ctrl_enabled = false; >> + >> qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL); >> if (IS_ERR(qcadev->susclk)) { >> dev_warn(&serdev->dev, "failed to acquire clk\n"); > i suggest stop here and request you code review for my changes, i found > the issue and given fix for my concern. What are you answering to? What the heck are you implying here? I think this crosses some threshold of ridiculous mailings. Please get your managers or colleagues to review your patches and process you follow. Best regards, Krzysztof