fixup dev_set_usb
[cascardo/linux.git] / drivers / platform / chromeos_ec-fw.c
index 56054fc..7b34c98 100644 (file)
 #include <linux/mfd/chromeos_ec.h>
 #include <linux/mfd/chromeos_ec_commands.h>
 #include <linux/platform_device.h>
+#include <linux/chromeos_platform.h>
 
 static ssize_t ec_fw_version_show(struct device *dev,
                                  struct device_attribute *attr, char *buf)
 {
        struct chromeos_ec_device *ec = dev_get_drvdata(dev);
        struct ec_response_get_version info;
-       const char * const copy_name[] = {"?", "RO", "A", "B"};
+       const char * const copy_name[] = {"?", "RO", "RW"};
        int ret;
 
        ret = ec->command_recv(ec, EC_CMD_GET_VERSION, &info,
@@ -37,27 +38,26 @@ static ssize_t ec_fw_version_show(struct device *dev,
        if (ret < 0)
                return ret;
 
-       if (info.current_image > EC_IMAGE_RW_B)
+       if (info.current_image > EC_IMAGE_RW)
                info.current_image = EC_IMAGE_UNKNOWN;
 
-       return scnprintf(buf, PAGE_SIZE, "Current: %s\nRO: %s\nA: %s\nB: %s\n",
+       return scnprintf(buf, PAGE_SIZE, "Current: %s\nRO: %s\nRW: %s\n",
                         copy_name[info.current_image], info.version_string_ro,
-                        info.version_string_rw_a, info.version_string_rw_b);
+                        info.version_string_rw);
 }
 
 static ssize_t ec_build_info_show(struct device *dev,
                                  struct device_attribute *attr, char *buf)
 {
        struct chromeos_ec_device *ec = dev_get_drvdata(dev);
-       struct ec_response_get_build_info info;
+       char info[EC_HOST_PARAM_SIZE];
        int ret;
 
-       ret = ec->command_recv(ec, EC_CMD_GET_BUILD_INFO, &info,
-                              sizeof(struct ec_response_get_build_info));
+       ret = ec->command_recv(ec, EC_CMD_GET_BUILD_INFO, info, sizeof(info));
        if (ret < 0)
                return ret;
 
-       return scnprintf(buf, PAGE_SIZE, "%s\n", info.build_string);
+       return scnprintf(buf, PAGE_SIZE, "%s\n", info);
 }
 
 static ssize_t ec_chip_info_show(struct device *dev,
@@ -76,14 +76,27 @@ static ssize_t ec_chip_info_show(struct device *dev,
                         info.vendor, info.name, info.revision);
 }
 
+static ssize_t ec_dev_usb_store(struct device *dev,
+                                struct device_attribute *attr,
+                                const char *buf, size_t count)
+{
+        int err;
+        err = chromeos_set_dev_usb();
+        if (err)
+                return err;
+        return count;
+}
+
 static DEVICE_ATTR(fw_version, S_IRUGO, ec_fw_version_show, NULL);
 static DEVICE_ATTR(build_info, S_IRUGO, ec_build_info_show, NULL);
 static DEVICE_ATTR(chip_info, S_IRUGO, ec_chip_info_show, NULL);
+static DEVICE_ATTR(dev_usb, S_IWUGO, NULL, ec_dev_usb_store);
 
 static struct attribute *ec_fw_attrs[] = {
        &dev_attr_fw_version.attr,
        &dev_attr_build_info.attr,
        &dev_attr_chip_info.attr,
+       &dev_attr_dev_usb.attr,
        NULL
 };
 
@@ -98,9 +111,14 @@ static int __devinit ec_fw_probe(struct platform_device *pdev)
        int err;
 
        err = sysfs_create_group(&dev->kobj, &ec_fw_attr_group);
-       if (err)
+       if (err) {
                dev_warn(dev, "error creating sysfs entries.\n");
-       return err;
+               return err;
+       }
+
+       dev_dbg(dev, "Chrome EC Firmware Information\n");
+
+       return 0;
 }
 
 static int __devexit ec_fw_remove(struct platform_device *pdev)