if (mc13xxx->flags & MC13XXX_USE_ADC)
                mc13xxx_add_subdevice(mc13xxx, "%s-adc");
 
-       if (mc13xxx->flags & MC13XXX_USE_CODEC) {
-               if (pdata)
-                       mc13xxx_add_subdevice_pdata(mc13xxx, "%s-codec",
-                               pdata->codec, sizeof(*pdata->codec));
-               else
-                       mc13xxx_add_subdevice(mc13xxx, "%s-codec");
-       }
-
        if (mc13xxx->flags & MC13XXX_USE_RTC)
                mc13xxx_add_subdevice(mc13xxx, "%s-rtc");
 
-       if (mc13xxx->flags & MC13XXX_USE_TOUCHSCREEN)
-               mc13xxx_add_subdevice_pdata(mc13xxx, "%s-ts",
-                               &pdata->touch, sizeof(pdata->touch));
-
        if (pdata) {
                mc13xxx_add_subdevice_pdata(mc13xxx, "%s-regulator",
                        &pdata->regulators, sizeof(pdata->regulators));
                                pdata->leds, sizeof(*pdata->leds));
                mc13xxx_add_subdevice_pdata(mc13xxx, "%s-pwrbutton",
                                pdata->buttons, sizeof(*pdata->buttons));
+               if (mc13xxx->flags & MC13XXX_USE_CODEC)
+                       mc13xxx_add_subdevice_pdata(mc13xxx, "%s-codec",
+                               pdata->codec, sizeof(*pdata->codec));
+               if (mc13xxx->flags & MC13XXX_USE_TOUCHSCREEN)
+                       mc13xxx_add_subdevice_pdata(mc13xxx, "%s-ts",
+                               &pdata->touch, sizeof(pdata->touch));
        } else {
                mc13xxx_add_subdevice(mc13xxx, "%s-regulator");
                mc13xxx_add_subdevice(mc13xxx, "%s-led");
                mc13xxx_add_subdevice(mc13xxx, "%s-pwrbutton");
+               if (mc13xxx->flags & MC13XXX_USE_CODEC)
+                       mc13xxx_add_subdevice(mc13xxx, "%s-codec");
+               if (mc13xxx->flags & MC13XXX_USE_TOUCHSCREEN)
+                       mc13xxx_add_subdevice(mc13xxx, "%s-ts");
        }
 
        return 0;