]> git.karo-electronics.de Git - karo-tx-uboot.git/blobdiff - drivers/usbtty.c
Merge branch 'mpc86xx'
[karo-tx-uboot.git] / drivers / usbtty.c
index 2f89e2b7411c307cf27a5876ed6fb49b786e3d86..ce4a12e16e0eb7e0eb307a086a1014c327db0f80 100644 (file)
@@ -69,13 +69,18 @@ static struct usb_endpoint_instance  endpoint_instance[NUM_ENDPOINTS+1]; /* one
 int usbtty_configured_flag = 0;
 
 
+/*
+ * Serial number
+ */
+static char serial_number[16];
+
 /*
  * Descriptors
  */
 static u8 wstrLang[4] = {4,USB_DT_STRING,0x9,0x4};
 static u8 wstrManufacturer[2 + 2*(sizeof(CONFIG_USBD_MANUFACTURER)-1)];
 static u8 wstrProduct[2 + 2*(sizeof(CONFIG_USBD_PRODUCT_NAME)-1)];
-static u8 wstrSerial[2 + 2*(sizeof(CONFIG_USBD_SERIAL_NUMBER)-1)];
+static u8 wstrSerial[2 + 2*(sizeof(serial_number) - 1)];
 static u8 wstrConfiguration[2 + 2*(sizeof(CONFIG_USBD_CONFIGURATION_STR)-1)];
 static u8 wstrInterface[2 + 2*(sizeof(CONFIG_USBD_INTERFACE_STR)-1)];
 
@@ -307,7 +312,20 @@ void usbtty_puts (const char *str)
 int drv_usbtty_init (void)
 {
        int rc;
+       char * sn;
+       int snlen;
 
+       if (!(sn = getenv("serial#"))) {
+               sn = "000000000000";
+       }
+       snlen = strlen(sn);
+       if (snlen > sizeof(serial_number) - 1) {
+               printf ("Warning: serial number %s is too long (%d > %d)\n",
+                       sn, snlen, sizeof(serial_number) - 1);
+               snlen = sizeof(serial_number) - 1;
+       }
+       memcpy (serial_number, sn, snlen);
+       serial_number[snlen] = '\0';
 
        /* prepare buffers... */
        buf_init (&usbtty_input, USBTTY_BUFFER_SIZE);
@@ -355,9 +373,9 @@ static void usbtty_init_strings (void)
        str2wide (CONFIG_USBD_PRODUCT_NAME, string->wData);
 
        string = (struct usb_string_descriptor *) wstrSerial;
-       string->bLength = sizeof (wstrSerial);
+       string->bLength = 2 + 2*strlen(serial_number);
        string->bDescriptorType = USB_DT_STRING;
-       str2wide (CONFIG_USBD_SERIAL_NUMBER, string->wData);
+       str2wide (serial_number, string->wData);
 
        string = (struct usb_string_descriptor *) wstrConfiguration;
        string->bLength = sizeof (wstrConfiguration);
@@ -392,7 +410,7 @@ static void usbtty_init_instances (void)
        bus_instance->endpoint_array = endpoint_instance;
        bus_instance->max_endpoints = 1;
        bus_instance->maxpacketsize = 64;
-       bus_instance->serial_number_str = CONFIG_USBD_SERIAL_NUMBER;
+       bus_instance->serial_number_str = serial_number;
 
        /* configuration instance */
        memset (config_instance, 0,