From b3eba31466808b8756f0fee5b5596899f4878c29 Mon Sep 17 00:00:00 2001 From: shengfei Xu Date: Mon, 21 Aug 2017 15:31:03 +0800 Subject: [PATCH] rtc: rk808: check the rtc is available Change-Id: I383c08cd5ad7cb282c0ec0aa12e9e84c9df52ba3 Signed-off-by: shengfei Xu Signed-off-by: Elaine Zhang --- drivers/rtc/rtc-rk808.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/drivers/rtc/rtc-rk808.c b/drivers/rtc/rtc-rk808.c index c0334c602e88..4647a7c685de 100644 --- a/drivers/rtc/rtc-rk808.c +++ b/drivers/rtc/rtc-rk808.c @@ -388,13 +388,37 @@ static int rk808_rtc_probe(struct platform_device *pdev) { struct rk808 *rk808 = dev_get_drvdata(pdev->dev.parent); struct rk808_rtc *rk808_rtc; + struct device_node *np; int ret; + switch (rk808->variant) { + case RK805_ID: + case RK808_ID: + case RK816_ID: + case RK818_ID: + np = of_get_child_by_name(pdev->dev.parent->of_node, "rtc"); + if (np && !of_device_is_available(np)) { + dev_info(&pdev->dev, "device is disabled\n"); + return -EINVAL; + } + break; + default: + break; + } + rk808_rtc = devm_kzalloc(&pdev->dev, sizeof(*rk808_rtc), GFP_KERNEL); if (rk808_rtc == NULL) return -ENOMEM; switch (rk808->variant) { + case RK808_ID: + case RK818_ID: + rk808_rtc->creg = &rk808_creg; + break; + case RK805_ID: + case RK816_ID: + rk808_rtc->creg = &rk808_creg; + break; case RK809_ID: case RK817_ID: rk808_rtc->creg = &rk817_creg;