|
@@ -249,9 +249,14 @@ struct clk_div_table {
|
|
|
* CLK_DIVIDER_ONE_BASED - by default the divisor is the value read from the
|
|
|
* register plus one. If CLK_DIVIDER_ONE_BASED is set then the divider is
|
|
|
* the raw value read from the register, with the value of zero considered
|
|
|
- * invalid
|
|
|
+ * invalid, unless CLK_DIVIDER_ALLOW_ZERO is set.
|
|
|
* CLK_DIVIDER_POWER_OF_TWO - clock divisor is 2 raised to the value read from
|
|
|
* the hardware register
|
|
|
+ * CLK_DIVIDER_ALLOW_ZERO - Allow zero divisors. For dividers which have
|
|
|
+ * CLK_DIVIDER_ONE_BASED set, it is possible to end up with a zero divisor.
|
|
|
+ * Some hardware implementations gracefully handle this case and allow a
|
|
|
+ * zero divisor by not modifying their input clock
|
|
|
+ * (divide by one / bypass).
|
|
|
*/
|
|
|
struct clk_divider {
|
|
|
struct clk_hw hw;
|
|
@@ -265,6 +270,7 @@ struct clk_divider {
|
|
|
|
|
|
#define CLK_DIVIDER_ONE_BASED BIT(0)
|
|
|
#define CLK_DIVIDER_POWER_OF_TWO BIT(1)
|
|
|
+#define CLK_DIVIDER_ALLOW_ZERO BIT(2)
|
|
|
|
|
|
extern const struct clk_ops clk_divider_ops;
|
|
|
struct clk *clk_register_divider(struct device *dev, const char *name,
|