summaryrefslogtreecommitdiff
path: root/board/toradex/colibri_vf/colibri_vf.c
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2014-12-19 13:54:40 +0100
committerStefan Agner <stefan.agner@toradex.com>2014-12-19 13:54:40 +0100
commitf7e57f71da1eecbf1ac28339868d15492c929925 (patch)
treec7b6cf430f5bbc893a5f230f6695a387c536062f /board/toradex/colibri_vf/colibri_vf.c
parentd69e7bbceb14e09f0af2cddeb68ee5734a1c2d45 (diff)
Set USB vendor and product ID of the module when using DFU. This allows to identify the module over USB and act accordingly if necessary (e.g. flash different version or root filesystem or similar use cases). Also the serial number of the USB device is visible by using the lsusb utility: $ lsusb -d 1b67: -v Bus 002 Device 092: ID 1b67:0018 Device Descriptor: bLength 18 bDescriptorType 1 bcdUSB 2.00 bDeviceClass 2 Communications bDeviceSubClass 2 Abstract (modem) bDeviceProtocol 0 bMaxPacketSize0 64 idVendor 0x1b67 idProduct 0x0018 bcdDevice 2.21 iManufacturer 1 Toradex iProduct 2 USB download gadget iSerial 3 4799890 ...
Diffstat (limited to 'board/toradex/colibri_vf/colibri_vf.c')
-rw-r--r--board/toradex/colibri_vf/colibri_vf.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/board/toradex/colibri_vf/colibri_vf.c b/board/toradex/colibri_vf/colibri_vf.c
index 92af6370cd..0740a264e5 100644
--- a/board/toradex/colibri_vf/colibri_vf.c
+++ b/board/toradex/colibri_vf/colibri_vf.c
@@ -19,6 +19,7 @@
#include <miiphy.h>
#include <netdev.h>
#include <i2c.h>
+#include <g_dnl.h>
#include "../common/configblock.h"
@@ -336,3 +337,43 @@ int checkboard(void)
return 0;
}
+
+int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
+{
+ char serialnr[64];
+ unsigned short prodnr;
+ unsigned short usb_pid;
+
+#ifdef CONFIG_TRDX_CFG_BLOCK
+ get_board_serial_char(serialnr);
+ get_board_product_number(&prodnr);
+#endif
+
+ put_unaligned(CONFIG_TRDX_VID, &dev->idVendor);
+
+ switch (prodnr) {
+ case 10:
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF50;
+ break;
+ case 11:
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF61;
+ break;
+ case 12:
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF61IT;
+ break;
+ case 13:
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF50IT;
+ break;
+ default:
+ if (is_colibri_vf61())
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF61IT;
+ else
+ usb_pid = CONFIG_TRDX_PID_COLIBRI_VF50;
+ break;
+ }
+
+ put_unaligned(usb_pid, &dev->idProduct);
+ g_dnl_set_serialnumber((char *)serialnr);
+
+ return 0;
+}