greybus: interface: add Ara serial-number support
authorJohan Hovold <johan@hovoldconsulting.com>
Tue, 29 Mar 2016 22:56:12 +0000 (18:56 -0400)
committerGreg Kroah-Hartman <gregkh@google.com>
Wed, 30 Mar 2016 21:23:19 +0000 (14:23 -0700)
Add support for reading the Ara serial-number attributes.

Signed-off-by: Johan Hovold <johan@hovoldconsulting.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/interface.c

index d0542e5a9ac2ca0d4759510a675316672604a6b0..27dbd79d2e19ca894f795a86ad280ca274bda85e 100644 (file)
@@ -24,6 +24,8 @@
 
 #define DME_TOSHIBA_ARA_VID            0x6000
 #define DME_TOSHIBA_ARA_PID            0x6001
+#define DME_TOSHIBA_ARA_SN0            0x6002
+#define DME_TOSHIBA_ARA_SN1            0x6003
 #define DME_TOSHIBA_ARA_INIT_STATUS    0x6101
 
 /* DDBL1 Manufacturer and Product ids */
@@ -42,6 +44,7 @@ static int gb_interface_dme_attr_get(struct gb_interface *intf,
 
 static int gb_interface_read_ara_dme(struct gb_interface *intf)
 {
+       u32 sn0, sn1;
        int ret;
 
        /*
@@ -64,8 +67,15 @@ static int gb_interface_read_ara_dme(struct gb_interface *intf)
        if (ret)
                return ret;
 
-       /* FIXME: serial number not implemented */
-       intf->serial_number = 0;
+       ret = gb_interface_dme_attr_get(intf, DME_TOSHIBA_ARA_SN0, &sn0);
+       if (ret)
+               return ret;
+
+       ret = gb_interface_dme_attr_get(intf, DME_TOSHIBA_ARA_SN1, &sn1);
+       if (ret)
+               return ret;
+
+       intf->serial_number = (u64)sn1 << 32 | sn0;
 
        return 0;
 }