}
 EXPORT_SYMBOL(clkdev_drop);
 
+static struct clk_lookup *__clk_register_clkdev(struct clk_hw *hw,
+                                               const char *con_id,
+                                               const char *dev_id, ...)
+{
+       struct clk_lookup *cl;
+       va_list ap;
+
+       va_start(ap, dev_id);
+       cl = vclkdev_create(hw, con_id, dev_id, ap);
+       va_end(ap);
+
+       return cl;
+}
+
 /**
  * clk_register_clkdev - register one clock lookup for a struct clk
  * @clk: struct clk to associate with all clk_lookups
  * @con_id: connection ID string on device
- * @dev_id: format string describing device name
+ * @dev_id: string describing device name
  *
  * con_id or dev_id may be NULL as a wildcard, just as in the rest of
  * clkdev.
  * after clk_register().
  */
 int clk_register_clkdev(struct clk *clk, const char *con_id,
-       const char *dev_fmt, ...)
+       const char *dev_id)
 {
        struct clk_lookup *cl;
-       va_list ap;
 
        if (IS_ERR(clk))
                return PTR_ERR(clk);
 
-       va_start(ap, dev_fmt);
-       cl = vclkdev_create(__clk_get_hw(clk), con_id, dev_fmt, ap);
-       va_end(ap);
+       /*
+        * Since dev_id can be NULL, and NULL is handled specially, we must
+        * pass it as either a NULL format string, or with "%s".
+        */
+       if (dev_id)
+               cl = __clk_register_clkdev(__clk_get_hw(clk), con_id, "%s",
+                                          dev_id);
+       else
+               cl = __clk_register_clkdev(__clk_get_hw(clk), con_id, NULL);
 
        return cl ? 0 : -ENOMEM;
 }
 
 void clkdev_add_table(struct clk_lookup *, size_t);
 int clk_add_alias(const char *, const char *, const char *, struct device *);
 
-int clk_register_clkdev(struct clk *, const char *, const char *, ...)
-       __printf(3, 4);
+int clk_register_clkdev(struct clk *, const char *, const char *);
 int clk_register_clkdevs(struct clk *, struct clk_lookup *, size_t);
 
 #ifdef CONFIG_COMMON_CLK