|
@@ -21,6 +21,7 @@ static int __init add_rtc(void)
|
|
|
struct device_node *np;
|
|
|
struct platform_device *pd;
|
|
|
struct resource res[2];
|
|
|
+ unsigned int num_res = 1;
|
|
|
int ret;
|
|
|
|
|
|
memset(&res, 0, sizeof(res));
|
|
@@ -41,14 +42,24 @@ static int __init add_rtc(void)
|
|
|
if (res[0].start != RTC_PORT(0))
|
|
|
return -EINVAL;
|
|
|
|
|
|
- /* Use a fixed interrupt value of 8 since on PPC if we are using this
|
|
|
- * its off an i8259 which we ensure has interrupt numbers 0..15. */
|
|
|
- res[1].start = 8;
|
|
|
- res[1].end = 8;
|
|
|
- res[1].flags = IORESOURCE_IRQ;
|
|
|
+ np = of_find_compatible_node(NULL, NULL, "chrp,iic");
|
|
|
+ if (!np)
|
|
|
+ np = of_find_compatible_node(NULL, NULL, "pnpPNP,000");
|
|
|
+ if (np) {
|
|
|
+ of_node_put(np);
|
|
|
+ /*
|
|
|
+ * Use a fixed interrupt value of 8 since on PPC if we are
|
|
|
+ * using this its off an i8259 which we ensure has interrupt
|
|
|
+ * numbers 0..15.
|
|
|
+ */
|
|
|
+ res[1].start = 8;
|
|
|
+ res[1].end = 8;
|
|
|
+ res[1].flags = IORESOURCE_IRQ;
|
|
|
+ num_res++;
|
|
|
+ }
|
|
|
|
|
|
pd = platform_device_register_simple("rtc_cmos", -1,
|
|
|
- &res[0], 2);
|
|
|
+ &res[0], num_res);
|
|
|
|
|
|
if (IS_ERR(pd))
|
|
|
return PTR_ERR(pd);
|