libplatsupport,zynq: clarify code behavior

Signed-off-by: Axel Heider <axelheider@gmx.de>
diff --git a/libplatsupport/src/mach/zynq/serial.c b/libplatsupport/src/mach/zynq/serial.c
index 4c0f55d..5d1f2f8 100644
--- a/libplatsupport/src/mach/zynq/serial.c
+++ b/libplatsupport/src/mach/zynq/serial.c
@@ -416,15 +416,25 @@
 
 static void zynq_uart_dev_init(
     ps_chardevice_t *dev,
-    const ps_io_ops_t *ops)
+    const ps_io_ops_t *ops,
+    enum chardev_id id,
+    void *vaddr,
+    const int *irqs)
 {
+    assert(NULL != dev);
+
     memset(dev, 0, sizeof(*dev));
 
     /* Set up all the  device properties. */
+    dev->id         = id;
+    dev->vaddr      = vaddr;
+    dev->irqs       = irqs;
+
     dev->read       = &uart_read;
     dev->write      = &uart_write;
     dev->handle_irq = &uart_handle_irq;
     dev->ioops      = *ops;
+
     dev->flags      = SERIAL_AUTO_CR;
 }
 
@@ -476,11 +486,20 @@
     const ps_io_ops_t *ops,
     ps_chardevice_t *dev)
 {
-    zynq_uart_dev_init(dev, ops);
-    dev->vaddr = vaddr;
+    assert(NULL != vaddr);
+    assert(NULL != ops);
+    assert(NULL != dev);
 
-    int error = zynq_uart_init(dev);
-    return error;
+    /* There is a design quirk here, no context information is passed which
+     * UART this is and what interrupt it uses. So we have set something now
+     * to make this well defined. ZYNQ_UART0 seem a good choice, because this
+     * is what the callers usually want. The contents of the interrupt field
+     * are not used in the driver, so we set this to NULL.
+     */
+
+    zynq_uart_dev_init(dev, ops, ZYNQ_UART0, vaddr, NULL);
+
+    return zynq_uart_init(dev);
 
 }
 
@@ -489,18 +508,17 @@
     const ps_io_ops_t *ops,
     ps_chardevice_t *dev)
 {
+    assert(NULL != defn);
+    assert(NULL != ops);
+    assert(NULL != dev);
+
     /* Attempt to map the virtual address, assure this works */
     void *vaddr = chardev_map(defn, ops);
     if (vaddr == NULL) {
         return -1;
     }
 
-    zynq_uart_dev_init(dev, ops);
-    /* Set up the remaining device properties. */
-    dev->id         = defn->id;
-    dev->vaddr      = (void *)vaddr;
-    dev->irqs       = defn->irqs;
+    zynq_uart_dev_init(dev, ops, defn->id, vaddr, defn->irqs);
 
-    int error = zynq_uart_init(dev);
-    return error;
+    return zynq_uart_init(dev);
 }