static ssize_t modalias_show(struct device *dev,
                                struct device_attribute *attr, char *buf)
 {
-       ssize_t len = of_device_get_modalias(dev, buf, PAGE_SIZE - 2);
-       buf[len] = '\n';
-       buf[len+1] = 0;
-       return len+1;
+       return of_device_modalias(dev, buf, PAGE_SIZE);
 }
 
 static struct device_attribute ibmebus_bus_device_attrs[] = {
 
        struct platform_device  *pdev = to_platform_device(dev);
        int len;
 
-       len = of_device_get_modalias(dev, buf, PAGE_SIZE -1);
+       len = of_device_modalias(dev, buf, PAGE_SIZE);
        if (len != -ENODEV)
                return len;
 
 
 static ssize_t modalias_show (struct device *dev, struct device_attribute *attr,
                              char *buf)
 {
-       int len = of_device_get_modalias(dev, buf, PAGE_SIZE - 2);
-
-       buf[len] = '\n';
-       buf[len+1] = 0;
-
-       return len+1;
+       return of_device_modalias(dev, buf, PAGE_SIZE);
 }
 
 static ssize_t devspec_show(struct device *dev,
 
 }
 EXPORT_SYMBOL(of_device_get_match_data);
 
-ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len)
+static ssize_t of_device_get_modalias(struct device *dev, char *str, ssize_t len)
 {
        const char *compat;
        int cplen, i;
 
        return repend;
 }
-EXPORT_SYMBOL_GPL(of_device_get_modalias);
 
 int of_device_request_module(struct device *dev)
 {
 }
 EXPORT_SYMBOL_GPL(of_device_request_module);
 
+/**
+ * of_device_modalias - Fill buffer with newline terminated modalias string
+ */
+ssize_t of_device_modalias(struct device *dev, char *str, ssize_t len)
+{
+       ssize_t sl = of_device_get_modalias(dev, str, len - 2);
+       if (sl < 0)
+               return sl;
+
+       str[sl++] = '\n';
+       str[sl] = 0;
+       return sl;
+}
+EXPORT_SYMBOL_GPL(of_device_modalias);
+
 /**
  * of_device_uevent - Display OF related uevent information
  */
 
 static ssize_t modalias_show(struct device *dev,
                             struct device_attribute *attr, char *buf)
 {
-       ssize_t len = of_device_get_modalias(dev, buf, PAGE_SIZE - 2);
-       buf[len] = '\n';
-       buf[len+1] = 0;
-       return len+1;
+       return of_device_modalias(dev, buf, PAGE_SIZE);
 }
 
 static struct device_attribute serdev_device_attrs[] = {
 
        int len;
        struct ulpi *ulpi = to_ulpi_dev(dev);
 
-       len = of_device_get_modalias(dev, buf, PAGE_SIZE - 1);
+       len = of_device_modalias(dev, buf, PAGE_SIZE);
        if (len != -ENODEV)
                return len;
 
 
 
 extern const void *of_device_get_match_data(const struct device *dev);
 
-extern ssize_t of_device_get_modalias(struct device *dev,
-                                       char *str, ssize_t len);
+extern ssize_t of_device_modalias(struct device *dev, char *str, ssize_t len);
 extern int of_device_request_module(struct device *dev);
 
 extern void of_device_uevent(struct device *dev, struct kobj_uevent_env *env);
        return NULL;
 }
 
-static inline int of_device_get_modalias(struct device *dev,
-                                  char *str, ssize_t len)
+static inline int of_device_modalias(struct device *dev,
+                                    char *str, ssize_t len)
 {
        return -ENODEV;
 }