#define MOR_KEY_MASK           (0xff << 16)
 
+#define clk_main_parent_select(s)      (((s) & \
+                                       (AT91_PMC_MOSCEN | \
+                                       AT91_PMC_OSCBYPASS)) ? 1 : 0)
+
 struct clk_main_osc {
        struct clk_hw hw;
        struct regmap *regmap;
 
        regmap_read(regmap, AT91_PMC_SR, &status);
 
-       return (status & AT91_PMC_MOSCS) && (tmp & AT91_PMC_MOSCEN);
+       return (status & AT91_PMC_MOSCS) && clk_main_parent_select(tmp);
 }
 
 static const struct clk_ops main_osc_ops = {
 
        regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status);
 
-       return status & AT91_PMC_MOSCEN ? 1 : 0;
+       return clk_main_parent_select(status);
 }
 
 static const struct clk_ops sam9x5_main_ops = {
        clkmain->hw.init = &init;
        clkmain->regmap = regmap;
        regmap_read(clkmain->regmap, AT91_CKGR_MOR, &status);
-       clkmain->parent = status & AT91_PMC_MOSCEN ? 1 : 0;
+       clkmain->parent = clk_main_parent_select(status);
 
        hw = &clkmain->hw;
        ret = clk_hw_register(NULL, &clkmain->hw);