diff mbox series

[v2,6/9] rtc: sun6i: Allow probing without an early clock provider

Message ID 20210928080335.36706-7-samuel@sholland.org (mailing list archive)
State Not Applicable, archived
Headers show
Series clk: sunxi-ng: Add a RTC CCU driver | expand

Commit Message

Samuel Holland Sept. 28, 2021, 8:03 a.m. UTC
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>
---
Changes since v1:
  - New patch. (This patch is independent of the rest of the series.)

 drivers/rtc/rtc-sun6i.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

Comments

Alexandre Belloni Oct. 23, 2021, 9:50 p.m. UTC | #1
On Tue, 28 Sep 2021 03:03:32 -0500, Samuel Holland wrote:
> 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.
> 
> 
> [...]

Applied, thanks!

[6/9] rtc: sun6i: Allow probing without an early clock provider
      commit: 814691c7f7d1f958ac30c3dca5070a95c1f658dd

Best regards,
diff mbox series

Patch

diff --git a/drivers/rtc/rtc-sun6i.c b/drivers/rtc/rtc-sun6i.c
index adec1b14a8de..711832c758ae 100644
--- a/drivers/rtc/rtc-sun6i.c
+++ b/drivers/rtc/rtc-sun6i.c
@@ -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);