On Mon, Mar 17, 2025 at 10:13:16AM +0000, Sudeep Holla wrote: > The EFI RTC driver does not require the creation of a platform device. > Originally, this approach was chosen for simplicity when the driver was > first implemented. > > With the introduction of the lightweight faux device interface, we now > have a more appropriate alternative. Migrate the driver to utilize the > faux bus, given that the platform device it previously created was not > a real one anyway. This will simplify the code, reducing its footprint > while maintaining functionality. > > Cc: Ard Biesheuvel <ardb@xxxxxxxxxx> > Cc: Alexandre Belloni <alexandre.belloni@xxxxxxxxxxx> > Cc: linux-rtc@xxxxxxxxxxxxxxx > Cc: linux-efi@xxxxxxxxxxxxxxx > Signed-off-by: Sudeep Holla <sudeep.holla@xxxxxxx> > --- > drivers/firmware/efi/efi.c | 3 --- > drivers/rtc/rtc-efi.c | 31 ++++++++++++++++++++++--------- > 2 files changed, 22 insertions(+), 12 deletions(-) > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index eec173cb1f398d3b4f28b42c917e50e1728dc277..18deb2d212ce6944927f5e3a9a40bb6754e7ffa9 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -427,9 +427,6 @@ static int __init efisubsys_init(void) > } > } > > - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > - platform_device_register_simple("rtc-efi", 0, NULL, 0); > - > /* We register the efi directory at /sys/firmware/efi */ > efi_kobj = kobject_create_and_add("efi", firmware_kobj); > if (!efi_kobj) { > diff --git a/drivers/rtc/rtc-efi.c b/drivers/rtc/rtc-efi.c > index fa8bf82df9488e7d1c23c058b4a3032dde74bc6e..3d21a470e8ff9777c5eeb991f3aa9170f6351930 100644 > --- a/drivers/rtc/rtc-efi.c > +++ b/drivers/rtc/rtc-efi.c > @@ -14,7 +14,7 @@ > #include <linux/module.h> > #include <linux/stringify.h> > #include <linux/time.h> > -#include <linux/platform_device.h> > +#include <linux/device/faux.h> > #include <linux/rtc.h> > #include <linux/efi.h> > > @@ -254,7 +254,7 @@ static const struct rtc_class_ops efi_rtc_ops = { > .proc = efi_procfs, > }; > > -static int __init efi_rtc_probe(struct platform_device *dev) > +static int __init efi_rtc_probe(struct faux_device *dev) > { > struct rtc_device *rtc; > efi_time_t eft; > @@ -268,7 +268,7 @@ static int __init efi_rtc_probe(struct platform_device *dev) > if (IS_ERR(rtc)) > return PTR_ERR(rtc); > > - platform_set_drvdata(dev, rtc); > + faux_device_set_drvdata(dev, rtc); > > rtc->ops = &efi_rtc_ops; > clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); > @@ -282,15 +282,28 @@ static int __init efi_rtc_probe(struct platform_device *dev) > return devm_rtc_register_device(rtc); > } > > -static struct platform_driver efi_rtc_driver = { > - .driver = { > - .name = "rtc-efi", > - }, > +static struct faux_device_ops efi_rtc_fdev_ops = { > + .probe = efi_rtc_probe, > }; > > -module_platform_driver_probe(efi_rtc_driver, efi_rtc_probe); > +static int __init rtc_efi_init(void) > +{ > + struct faux_device *fdev; > + > + if (!efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > + return 0; > + > + fdev = faux_device_create("rtc-efi", NULL, &efi_rtc_fdev_ops); > + if (!fdev) { > + pr_err("rtc-efi: could not create the device\n"); > + return -ENODEV; > + } > + > + return 0; > +} > +device_initcall(rtc_efi_init); > > MODULE_AUTHOR("dann frazier <dannf@xxxxxxxxx>"); > MODULE_LICENSE("GPL"); > MODULE_DESCRIPTION("EFI RTC driver"); > -MODULE_ALIAS("platform:rtc-efi"); > +MODULE_ALIAS("faux:rtc-efi"); No alias please.