On Mon, Jan 9, 2017 at 12:32 AM, Sudip Mukherjee<snip>
<sudipm.mukherjee@xxxxxxxxx> wrote:
From: Sudip Mukherjee <sudip.mukherjee@xxxxxxxxxxxxxxx>
Add the serial driver for the Exar chips. And also register the
platform device for the gpio provided by the Exar chips.
GPIO ?
+ /*
+ * Setup Multipurpose Input/Output pins.
+ */
+ if (idx == 0)
+ setup_gpio(p);
So, my question is can we do this in GPIO driver?
Can we register it beforehand if needed?
<snip>
+
+
+static int
+exar_pci_probe(struct pci_dev *pcidev, const struct pci_device_id *ent)
+{
+ int rc;
Make it last in the definition block. I think I mentioned this earlier.
+ struct exar8250_board *board;
+ struct uart_8250_port uart;
+ struct exar8250 *priv;
+ unsigned int nr_ports, i, bar = 0, maxnr;
+
+ board = (struct exar8250_board *)ent->driver_data;
+
+ rc = pcim_enable_device(pcidev);
+ if (rc)
+ return rc;
+
+ if (!pcim_iomap(pcidev, bar, 0) && !pcim_iomap_table(pcidev))
+ return -ENOMEM;
You ignored my comment, we may never finish the review in such case :-(
Asking again: do you really need this part? I know why I did so and
put it to 8250_pci, but let's focus on your code.
<snip>
+
+ maxnr = (pci_resource_len(pcidev, bar) - board->first_offset) >>
+ (board->reg_shift + 3);
+static const struct exar8250_board pbn_exar_XR17C158 = {
+ .num_ports = 8,
+ .base_baud = 921600,
+ .uart_offset = 0x200,
+ .setup = pci_xr17c154_setup,
+};
+
Port number is easily to get from device ID, I already said this.
nr = subvendor == PCI_VENDOR_ID_IBM ? 1 : device & 0x0f;
Yes, it means ->setup() hook will allocate memory for lines (declare
them as int *line and use devm_kcalloc).