Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

power: reset: qcom-pon: add support for pm8941-pon

For PM8941 we don't have a defined field to store the reset reason.
Support wrapping pwrkey and resin, but without writing the reset
reason.

Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org>
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>

authored by

Dmitry Baryshkov and committed by
Sebastian Reichel
4dea2fd6 7a54cf02

+15 -7
+15 -7
drivers/power/reset/qcom-pon.c
··· 17 17 #define GEN1_REASON_SHIFT 2 18 18 #define GEN2_REASON_SHIFT 1 19 19 20 + #define NO_REASON_SHIFT 0 21 + 20 22 struct pm8916_pon { 21 23 struct device *dev; 22 24 struct regmap *regmap; ··· 47 45 static int pm8916_pon_probe(struct platform_device *pdev) 48 46 { 49 47 struct pm8916_pon *pon; 48 + long reason_shift; 50 49 int error; 51 50 52 51 pon = devm_kzalloc(&pdev->dev, sizeof(*pon), GFP_KERNEL); ··· 67 64 if (error) 68 65 return error; 69 66 70 - pon->reboot_mode.dev = &pdev->dev; 71 - pon->reason_shift = (long)of_device_get_match_data(&pdev->dev); 72 - pon->reboot_mode.write = pm8916_reboot_mode_write; 73 - error = devm_reboot_mode_register(&pdev->dev, &pon->reboot_mode); 74 - if (error) { 75 - dev_err(&pdev->dev, "can't register reboot mode\n"); 76 - return error; 67 + reason_shift = (long)of_device_get_match_data(&pdev->dev); 68 + 69 + if (reason_shift != NO_REASON_SHIFT) { 70 + pon->reboot_mode.dev = &pdev->dev; 71 + pon->reason_shift = reason_shift; 72 + pon->reboot_mode.write = pm8916_reboot_mode_write; 73 + error = devm_reboot_mode_register(&pdev->dev, &pon->reboot_mode); 74 + if (error) { 75 + dev_err(&pdev->dev, "can't register reboot mode\n"); 76 + return error; 77 + } 77 78 } 78 79 79 80 platform_set_drvdata(pdev, pon); ··· 87 80 88 81 static const struct of_device_id pm8916_pon_id_table[] = { 89 82 { .compatible = "qcom,pm8916-pon", .data = (void *)GEN1_REASON_SHIFT }, 83 + { .compatible = "qcom,pm8941-pon", .data = (void *)NO_REASON_SHIFT }, 90 84 { .compatible = "qcom,pms405-pon", .data = (void *)GEN1_REASON_SHIFT }, 91 85 { .compatible = "qcom,pm8998-pon", .data = (void *)GEN2_REASON_SHIFT }, 92 86 { .compatible = "qcom,pmk8350-pon", .data = (void *)GEN2_REASON_SHIFT },