},
 };
 
+/*
+ * This is a frequency table for "General Purpose" clocks.
+ * These clocks can be muxed to the SoC pins and may be used by
+ * external devices. They're often used as PWM source.
+ *
+ * See comment at ftbl_gcc_gp1_3_clk.
+ */
 static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
+       F(10000,   P_XO,    16,  1, 120),
+       F(100000,  P_XO,    16,  1,  12),
+       F(500000,  P_GPLL0, 16,  1, 100),
+       F(1000000, P_GPLL0, 16,  1,  50),
+       F(2500000, P_GPLL0, 16,  1,  20),
+       F(5000000, P_GPLL0, 16,  1,  10),
        F(100000000, P_GPLL0, 8, 0, 0),
        F(200000000, P_GPLL0, 4, 0, 0),
        { }
        },
 };
 
+/*
+ * This is a frequency table for "General Purpose" clocks.
+ * These clocks can be muxed to the SoC pins and may be used by
+ * external devices. They're often used as PWM source.
+ *
+ * Please note that MND divider must be enabled for duty-cycle
+ * control to be possible. (M != N) Also since D register is configured
+ * with a value multiplied by 2, and duty cycle is calculated as
+ *                             (2 * D) % 2^W
+ *                DutyCycle = ----------------
+ *                              2 * (N % 2^W)
+ * (where W = .mnd_width)
+ * N must be half or less than maximum value for the register.
+ * Otherwise duty-cycle control would be limited.
+ * (e.g. for 8-bit NMD N should be less than 128)
+ */
 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
+       F(10000,   P_XO,    16,  1, 120),
+       F(100000,  P_XO,    16,  1,  12),
+       F(500000,  P_GPLL0, 16,  1, 100),
+       F(1000000, P_GPLL0, 16,  1,  50),
+       F(2500000, P_GPLL0, 16,  1,  20),
+       F(5000000, P_GPLL0, 16,  1,  10),
        F(19200000, P_XO, 1, 0, 0),
        { }
 };