#define CLKRC_24MHz            0xc0
 #define CLKRC_DIV_MASK         0x3f
 #define GET_CLKRC_DIV(x)       (((x) & CLKRC_DIV_MASK) + 1)
+#define DEF_CLKRC              0x00
 
 #define COMA_RESET             BIT(7)
 #define COMA_QCIF              BIT(5)
        else if (div > GET_CLKRC_DIV(CLKRC_DIV_MASK))
                div = GET_CLKRC_DIV(CLKRC_DIV_MASK);
 
-       /*
-        * Keep result to be used as tpf limit
-        * for subsequent clock divider calculations
-        */
-       priv->tpf.numerator = div;
-       priv->tpf.denominator = FRAME_RATE_MAX;
+       tpf->numerator = div;
+       tpf->denominator = FRAME_RATE_MAX;
 
-       clkrc = to_clkrc(&priv->tpf, priv->pclk_limit, priv->pclk_max);
+       clkrc = to_clkrc(tpf, priv->pclk_limit, priv->pclk_max);
 
        ret = ov6650_reg_rmw(client, REG_CLKRC, clkrc, CLKRC_DIV_MASK);
        if (!ret) {
-               tpf->numerator = GET_CLKRC_DIV(clkrc);
-               tpf->denominator = FRAME_RATE_MAX;
+               priv->tpf.numerator = GET_CLKRC_DIV(clkrc);
+               priv->tpf.denominator = FRAME_RATE_MAX;
+
+               *tpf = priv->tpf;
        }
 
        return ret;
        priv->rect.width  = W_CIF;
        priv->rect.height = H_CIF;
 
+       /* Hardware default frame interval */
+       priv->tpf.numerator   = GET_CLKRC_DIV(DEF_CLKRC);
+       priv->tpf.denominator = FRAME_RATE_MAX;
+
        priv->subdev.internal_ops = &ov6650_internal_ops;
 
        ret = v4l2_async_register_subdev(&priv->subdev);