OSDN Git Service

rtc: sun6i: Allow probing without an early clock provider
authorSamuel Holland <samuel@sholland.org>
Tue, 28 Sep 2021 08:03:32 +0000 (03:03 -0500)
committerAlexandre Belloni <alexandre.belloni@bootlin.com>
Sat, 23 Oct 2021 21:50:27 +0000 (23:50 +0200)
Some SoCs have an RTC supported by this RTC driver, but do not have an
early clock provider declared here. Currently, this prevents the RTC
driver from probing, because it expects a global struct to already be
allocated. Fix probing the driver by copying the missing pieces from the
clock provider setup function, replacing them with the devm variants.

Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
Link: https://lore.kernel.org/r/20210928080335.36706-7-samuel@sholland.org
drivers/rtc/rtc-sun6i.c

index adec1b1..711832c 100644 (file)
@@ -673,8 +673,17 @@ static int sun6i_rtc_probe(struct platform_device *pdev)
        struct sun6i_rtc_dev *chip = sun6i_rtc;
        int ret;
 
-       if (!chip)
-               return -ENODEV;
+       if (!chip) {
+               chip = devm_kzalloc(&pdev->dev, sizeof(*chip), GFP_KERNEL);
+               if (!chip)
+                       return -ENOMEM;
+
+               spin_lock_init(&chip->lock);
+
+               chip->base = devm_platform_ioremap_resource(pdev, 0);
+               if (IS_ERR(chip->base))
+                       return PTR_ERR(chip->base);
+       }
 
        platform_set_drvdata(pdev, chip);