Commit 1ae2f435 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki
Browse files

ACPI: x86: cmos_rtc: Create a CMOS RTC platform device



Make the CMOS RTC ACPI scan handler create a platform device that will
be used subsequently by rtc-cmos for driver binding on x86 systems with
ACPI and update add_rtc_cmos() to skip registering a fallback platform
device for the CMOS RTC when the above one has been registered.

Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Acked-by: Dave Hansen <dave.hansen@linux.intel.com> # x86
Link: https://patch.msgid.link/1962427.tdWV9SEqCh@rafael.j.wysocki
parent 6cee29ad
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,7 @@
/*
 * RTC related functions
 */
#include <linux/acpi.h>
#include <linux/platform_device.h>
#include <linux/mc146818rtc.h>
#include <linux/export.h>
@@ -146,6 +147,9 @@ static __init int add_rtc_cmos(void)
		}
	}
#endif
	if (cmos_rtc_platform_device_present)
		return 0;

	if (!x86_platform.legacy.rtc)
		return -ENODEV;

+8 −0
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ static const struct acpi_device_id acpi_cmos_rtc_ids[] = {
	{}
};

bool cmos_rtc_platform_device_present;

static bool cmos_rtc_space_handler_present __read_mostly;

static acpi_status acpi_cmos_rtc_space_handler(u32 function,
@@ -103,6 +105,12 @@ static int acpi_cmos_rtc_attach(struct acpi_device *adev,
	if (ret < 0)
		return ret;

	if (IS_ERR_OR_NULL(acpi_create_platform_device(adev, NULL))) {
		pr_err("Failed to create CMOS-RTC platform device\n");
		return 0;
	} else {
		cmos_rtc_platform_device_present = true;
	}
	return 1;
}

+4 −0
Original line number Diff line number Diff line
@@ -791,6 +791,8 @@ const char *acpi_get_subsystem_id(acpi_handle handle);
int acpi_mrrm_max_mem_region(void);
#endif

extern bool cmos_rtc_platform_device_present;

#else	/* !CONFIG_ACPI */

#define acpi_disabled 1
@@ -1116,6 +1118,8 @@ static inline int acpi_mrrm_max_mem_region(void)
	return 1;
}

#define cmos_rtc_platform_device_present	false

#endif	/* !CONFIG_ACPI */

#ifdef CONFIG_ACPI_HMAT