[PATCH] staging: android: fix coding style
From: mourn Signed-off-by: mourn --- drivers/staging/android/uapi/ion.h | 12 ++-- 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/staging/android/uapi/ion.h b/drivers/staging/android/uapi/ion.h index f09e7c1..6aa4956 100644 --- a/drivers/staging/android/uapi/ion.h +++ b/drivers/staging/android/uapi/ion.h @@ -27,12 +27,12 @@ typedef int ion_user_handle_t; * @ION_HEAP_TYPE_SYSTEM: memory allocated via vmalloc * @ION_HEAP_TYPE_SYSTEM_CONTIG: memory allocated via kmalloc * @ION_HEAP_TYPE_CARVEOUT: memory allocated from a prereserved - * carveout heap, allocations are physically - * contiguous + * carveout heap, allocations are physically + * contiguous * @ION_HEAP_TYPE_DMA: memory allocated via DMA API * @ION_NUM_HEAPS: helper for iterating over heaps, a bit mask - * is used to identify the heaps, so only 32 - * total heap types are supported + * is used to identify the heaps, so only 32 + * total heap types are supported */ enum ion_heap_type { ION_HEAP_TYPE_SYSTEM, @@ -50,7 +50,7 @@ enum ion_heap_type { #define ION_HEAP_CARVEOUT_MASK (1 << ION_HEAP_TYPE_CARVEOUT) #define ION_HEAP_TYPE_DMA_MASK (1 << ION_HEAP_TYPE_DMA) -#define ION_NUM_HEAP_IDS sizeof(unsigned int) * 8 +#define ION_NUM_HEAP_IDS (sizeof(unsigned int) * 8) /** * allocation flags - the lower 16 bits are used by core ion, the upper 16 @@ -78,7 +78,7 @@ enum ion_heap_type { * @align: required alignment of the allocation * @heap_id_mask: mask of heap ids to allocate from * @flags: flags passed to heap - * @handle:pointer that will be populated with a cookie to use to + * @handle:pointer that will be populated with a cookie to use to * refer to this allocation * * Provided by userspace as an argument to the ioctl -- 1.7.10.4 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 0/2] staging: comedi: drivers: replace poc driver with new dac02 driver
On 2014-03-11 19:04, H Hartley Sweeten wrote: The poc driver was a catch-all for some very simple boards. Most of the boards that used to be supported by this driver have been migrated to other common drivers. The only board remaining in it was the DAC02, a two channel analog output board. Introduce a separate, simplified, driver for the DAC02 board and remove the poc driver. The dac02 driver now fully supports the hardware: 1) reports the analog output ranges that the hardware can produce 2) properly handles the comedi (*insn_read) and (*insn_write) functions 3) properly handles writes when a bipolar range is used In addition, the unnecessary boardinfo has been removed and the private data memory resource has been reduced. H Hartley Sweeten (2): staging: comedi: dac02: introduce comedi driver for DAC02 boards staging: comedi: poc: remove obsolete driver drivers/staging/comedi/Kconfig | 17 ++-- drivers/staging/comedi/drivers/Makefile | 2 +- drivers/staging/comedi/drivers/dac02.c | 172 drivers/staging/comedi/drivers/poc.c| 157 - 4 files changed, 181 insertions(+), 167 deletions(-) create mode 100644 drivers/staging/comedi/drivers/dac02.c delete mode 100644 drivers/staging/comedi/drivers/poc.c Reviewed-by: Ian Abbott -- -=( Ian Abbott @ MEV Ltd.E-mail: )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=- ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: android: fix coding style
On Thu, Mar 13, 2014 at 10:44:55AM +0100, mo...@2600fr.org wrote: > From: mourn > > Signed-off-by: mourn > --- > drivers/staging/android/uapi/ion.h | 12 ++-- > 1 file changed, 6 insertions(+), 6 deletions(-) The changes look good, however you should be a bit more specific about which ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: android: fix coding style
I'll try that again... On Thu, Mar 13, 2014 at 01:50:47PM +, Mark Einon wrote: > On Thu, Mar 13, 2014 at 10:44:55AM +0100, mo...@2600fr.org wrote: > > From: mourn > > > > Signed-off-by: mourn > > --- > > drivers/staging/android/uapi/ion.h | 12 ++-- > > 1 file changed, 6 insertions(+), 6 deletions(-) > The changes look good, however you should be a bit more specific about what the fixes are, and that you used checkpatch.pl to find them (I assume). Also, Signed-off-by: should state your full name, which I'm also assuming isn't 'mourn'. Please see Documentation/SubmittingPatches. Cheers, Mark ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH] staging: android: fix coding style
> The changes look good, however you should be a bit more specific about > what the > fixes are, and that you used checkpatch.pl to find them (I assume). > Yes, you are right. I can edit the commit log. > Also, Signed-off-by: should state your full name, which I'm also assuming > isn't > 'mourn'. Please see Documentation/SubmittingPatches. > I have a bit of a problem here. Some companies forbid their employees to openly participate in open source projects. A request to the legal department will take around 6 months with no hope of positive result... Thanks ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] staging: comedi: 8255_pci: initialize MITE data window
According to National Instruments' PCI-DIO-96/PXI-6508/PCI-6503 User Manual, the physical address in PCI BAR1 needs to be OR'ed with 0x80 and written to register offset 0xC0 in the "MITE" registers (BAR0). Do so during initialization of the National Instruments boards handled by the "8255_pci" driver. The boards were previously handled by the "ni_pcidio" driver, where the initialization was done by `mite_setup()` in the "mite" module. The "mite" module comes with too much extra baggage for the "8255_pci" driver to deal with so use a local, simpler initialization function. Signed-off-by: Ian Abbott Cc: # 3.10.y, 3.11.y, 3.12.y, 3.13.y, 3.14.y --- Needs backporting for kernels 3.7.y to 3.9.y if any distros are maintaining them. --- drivers/staging/comedi/drivers/8255_pci.c | 34 +++ 1 file changed, 34 insertions(+) diff --git a/drivers/staging/comedi/drivers/8255_pci.c b/drivers/staging/comedi/drivers/8255_pci.c index 47321de..46a385c 100644 --- a/drivers/staging/comedi/drivers/8255_pci.c +++ b/drivers/staging/comedi/drivers/8255_pci.c @@ -56,6 +56,7 @@ Configuration Options: not applicable, uses PCI auto config #include "../comedidev.h" #include "8255.h" +#include "mite.h" enum pci_8255_boardid { BOARD_ADLINK_PCI7224, @@ -79,6 +80,7 @@ struct pci_8255_boardinfo { const char *name; int dio_badr; int n_8255; + unsigned int has_mite:1; }; static const struct pci_8255_boardinfo pci_8255_boards[] = { @@ -126,36 +128,43 @@ static const struct pci_8255_boardinfo pci_8255_boards[] = { .name = "ni_pci-dio-96", .dio_badr = 1, .n_8255 = 4, + .has_mite = 1, }, [BOARD_NI_PCIDIO96B] = { .name = "ni_pci-dio-96b", .dio_badr = 1, .n_8255 = 4, + .has_mite = 1, }, [BOARD_NI_PXI6508] = { .name = "ni_pxi-6508", .dio_badr = 1, .n_8255 = 4, + .has_mite = 1, }, [BOARD_NI_PCI6503] = { .name = "ni_pci-6503", .dio_badr = 1, .n_8255 = 1, + .has_mite = 1, }, [BOARD_NI_PCI6503B] = { .name = "ni_pci-6503b", .dio_badr = 1, .n_8255 = 1, + .has_mite = 1, }, [BOARD_NI_PCI6503X] = { .name = "ni_pci-6503x", .dio_badr = 1, .n_8255 = 1, + .has_mite = 1, }, [BOARD_NI_PXI_6503] = { .name = "ni_pxi-6503", .dio_badr = 1, .n_8255 = 1, + .has_mite = 1, }, }; @@ -163,6 +172,25 @@ struct pci_8255_private { void __iomem *mmio_base; }; +static int pci_8255_mite_init(struct pci_dev *pcidev) +{ + void __iomem *mite_base; + u32 main_phys_addr; + + /* ioremap the MITE registers (BAR 0) temporarily */ + mite_base = pci_ioremap_bar(pcidev, 0); + if (!mite_base) + return -ENOMEM; + + /* set data window to main registers (BAR 1) */ + main_phys_addr = pci_resource_start(pcidev, 1); + writel(main_phys_addr | WENAB, mite_base + MITE_IODWBSR); + + /* finished with MITE registers */ + iounmap(mite_base); + return 0; +} + static int pci_8255_mmio(int dir, int port, int data, unsigned long iobase) { void __iomem *mmio_base = (void __iomem *)iobase; @@ -201,6 +229,12 @@ static int pci_8255_auto_attach(struct comedi_device *dev, if (ret) return ret; + if (board->has_mite) { + ret = pci_8255_mite_init(pcidev); + if (ret) + return ret; + } + is_mmio = (pci_resource_flags(pcidev, board->dio_badr) & IORESOURCE_MEM) != 0; if (is_mmio) { -- 1.8.5.4 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 3/3] staging/ozwpan: coding style ether_addr_copy
On 03/13/14 02:28, Greg Kroah-Hartman wrote: > On Thu, Mar 13, 2014 at 10:21:44AM +0900, Jérôme Pinot wrote: [...] > > diff --git a/drivers/staging/ozwpan/ozcdev.c > > b/drivers/staging/ozwpan/ozcdev.c > > index 5de5981..10c0a96 100644 > > --- a/drivers/staging/ozwpan/ozcdev.c > > +++ b/drivers/staging/ozwpan/ozcdev.c > > @@ -217,7 +217,7 @@ static int oz_set_active_pd(const u8 *addr) > > pd = oz_pd_find(addr); > > if (pd) { > > spin_lock_bh(&g_cdev.lock); > > - memcpy(g_cdev.active_addr, addr, ETH_ALEN); > > + ether_addr_copy(g_cdev.active_addr, addr); > > Are you sure this will work? No. But the ozwpan driver uses already ether_addr_equal which is not alignment-safe. As https://www.kernel.org/doc/Documentation/unaligned-memory-access.txt said: "This alignment-unsafe function is still useful as it is a decent optimization for the cases when you can ensure alignment, which is true almost all of the time in ethernet networking context." I expected the maintainer to confirm/infirm this. I'm just seeing that's actually Chris Kelly who did write this part of code, so I'm CC'ing him too. > You have to check the alignment of the variable. > > Also, this breaks the build, you need to include some kind of .h file to > get this to work, please ALWAYS test your patches to make sure they > don't break things. My bad, sorry. I'll send a better patch. Thanks for your time. > greg k-h -- Jérôme Pinot http://ngc891.blogdns.net/ ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] staging/ozwpan: coding style ether_addr_copy
This fixes the following issues detected by checkpatch.pl: WARNING: Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2) #220: FILE: drivers/staging/ozwpan/ozcdev.c:220: + memcpy(g_cdev.active_addr, addr, ETH_ALEN); WARNING: Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2) #286: FILE: drivers/staging/ozwpan/ozcdev.c:286: + memcpy(addr, g_cdev.active_addr, ETH_ALEN); WARNING: Prefer ether_addr_copy() over memcpy() if the Ethernet addresses are __aligned(2) #176: FILE: drivers/staging/ozwpan/ozpd.c:176: + memcpy(pd->mac_addr, mac_addr, ETH_ALEN); Signed-off-by: Jerome Pinot --- drivers/staging/ozwpan/ozcdev.c | 4 ++-- drivers/staging/ozwpan/ozpd.c | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/staging/ozwpan/ozcdev.c b/drivers/staging/ozwpan/ozcdev.c index 5de5981..10c0a96 100644 --- a/drivers/staging/ozwpan/ozcdev.c +++ b/drivers/staging/ozwpan/ozcdev.c @@ -217,7 +217,7 @@ static int oz_set_active_pd(const u8 *addr) pd = oz_pd_find(addr); if (pd) { spin_lock_bh(&g_cdev.lock); - memcpy(g_cdev.active_addr, addr, ETH_ALEN); + ether_addr_copy(g_cdev.active_addr, addr); old_pd = g_cdev.active_pd; g_cdev.active_pd = pd; spin_unlock_bh(&g_cdev.lock); @@ -283,7 +283,7 @@ static long oz_cdev_ioctl(struct file *filp, unsigned int cmd, u8 addr[ETH_ALEN]; oz_dbg(ON, "OZ_IOCTL_GET_ACTIVE_PD\n"); spin_lock_bh(&g_cdev.lock); - memcpy(addr, g_cdev.active_addr, ETH_ALEN); + ether_addr_copy(addr, g_cdev.active_addr); spin_unlock_bh(&g_cdev.lock); if (copy_to_user((void __user *)arg, addr, ETH_ALEN)) return -EFAULT; diff --git a/drivers/staging/ozwpan/ozpd.c b/drivers/staging/ozwpan/ozpd.c index 29a23a3..10f1b3a 100644 --- a/drivers/staging/ozwpan/ozpd.c +++ b/drivers/staging/ozwpan/ozpd.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "ozdbg.h" #include "ozprotocol.h" @@ -173,7 +174,7 @@ struct oz_pd *oz_pd_alloc(const u8 *mac_addr) pd->last_rx_pkt_num = 0x; oz_pd_set_state(pd, OZ_PD_S_IDLE); pd->max_tx_size = OZ_MAX_TX_SIZE; - memcpy(pd->mac_addr, mac_addr, ETH_ALEN); + ether_addr_copy(pd->mac_addr, mac_addr); if (0 != oz_elt_buf_init(&pd->elt_buff)) { kfree(pd); pd = NULL; -- Jérôme Pinot http://ngc891.blogdns.net/ ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 0/8] staging: comedi: fl512: clean up driver
I have been unable to locate any data on this board so I am unable to add any of the missing features. This clean up just gets the driver inline with the other cleaned up comedi drivers. H Hartley Sweeten (8): staging: comedi: fl512: tidy up subdevice init staging: comedi: fl512: rename the subdevice (*insn_{read,write}) functions staging: comedi: fl512: remove Fl512_SIZE define staging: comedi: fl512: tidy up fl512_ao_insn_read() staging: comedi: fl512: define the register map staging: comedi: fl512: tidy up fl512_ao_insn_write() staging: comedi: fl512: tidy up fl512_ao_insn_read() staging: comedi: fl512: tidy up the multi-line comments drivers/staging/comedi/drivers/fl512.c | 203 + 1 file changed, 103 insertions(+), 100 deletions(-) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 8/8] staging: comedi: fl512: tidy up the multi-line comments
From: H Hartley Sweeten Tidy up the multi-line comments to follow the CodingStyle. Add the GPL boilerplate comment found in other comedi drivers. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 41 ++ 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index 3bf6d6f..4e410f3 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -1,20 +1,33 @@ /* -comedi/drivers/fl512.c -Anders Gnistrup -*/ + * fl512.c + * Anders Gnistrup + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 2000 David A. Schleef + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ /* -Driver: fl512 -Description: unknown -Author: Anders Gnistrup -Devices: [unknown] FL512 (fl512) -Status: unknown - -Digital I/O is not supported. - -Configuration options: - [0] - I/O port base address -*/ + * Driver: fl512 + * Description: unknown + * Author: Anders Gnistrup + * Devices: [unknown] FL512 (fl512) + * Status: unknown + * + * Digital I/O is not supported. + * + * Configuration options: + * [0] - I/O port base address + */ #include #include "../comedidev.h" -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 3/8] staging: comedi: fl512: remove Fl512_SIZE define
From: H Hartley Sweeten This define is only used in the comedi_request_region() call to specify the size of the I/O region to request. Remove the define and just open code the value. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index 6eb8941..4054035 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -21,7 +21,6 @@ Configuration options: #include -#define FL512_SIZE 16 /* the size of the used memory */ struct fl512_private { unsigned short ao_readback[2]; }; @@ -105,7 +104,7 @@ static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it) struct comedi_subdevice *s; int ret; - ret = comedi_request_region(dev, it->options[0], FL512_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x10); if (ret) return ret; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 5/8] staging: comedi: fl512: define the register map
From: H Hartley Sweeten Define the register map and remove the magic values and some unnecessary comments. For aesthetics, remove the 'iobase' local variable and use dev->iobase directly. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 27 ++- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index f285110..8cb1f1e 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -21,6 +21,16 @@ Configuration options: #include +/* + * Register I/O map + */ +#define FL512_AI_LSB_REG 0x02 +#define FL512_AI_MSB_REG 0x03 +#define FL512_AI_MUX_REG 0x02 +#define FL512_AI_START_CONV_REG0x03 +#define FL512_AO_DATA_REG(x) (0x04 + ((x) * 2)) +#define FL512_AO_TRIG_REG(x) (0x04 + ((x) * 2)) + struct fl512_private { unsigned short ao_readback[2]; }; @@ -45,17 +55,16 @@ static int fl512_ai_insn_read(struct comedi_device *dev, int n; unsigned int lo_byte, hi_byte; char chan = CR_CHAN(insn->chanspec); - unsigned long iobase = dev->iobase; for (n = 0; n < insn->n; n++) { /* sample n times on selected channel */ /* XXX probably can move next step out of for() loop -- will * make AI a little bit faster. */ - outb(chan, iobase + 2); /* select chan */ - outb(0, iobase + 3);/* start conversion */ + outb(chan, dev->iobase + FL512_AI_MUX_REG); + outb(0, dev->iobase + FL512_AI_START_CONV_REG); /* XXX should test "done" flag instead of delay */ udelay(30); /* sleep 30 usec */ - lo_byte = inb(iobase + 2); /* low 8 byte */ - hi_byte = inb(iobase + 3) & 0xf; /* high 4 bit and mask */ + lo_byte = inb(dev->iobase + FL512_AI_LSB_REG); + hi_byte = inb(dev->iobase + FL512_AI_MSB_REG) & 0xf; data[n] = lo_byte + (hi_byte << 8); } return n; @@ -69,14 +78,14 @@ static int fl512_ao_insn_write(struct comedi_device *dev, struct fl512_private *devpriv = dev->private; int n; int chan = CR_CHAN(insn->chanspec); /* get chan to write */ - unsigned long iobase = dev->iobase; /* get base address */ for (n = 0; n < insn->n; n++) { /* write n data set */ /* write low byte */ - outb(data[n] & 0x0ff, iobase + 4 + 2 * chan); + outb(data[n] & 0x0ff, dev->iobase + FL512_AO_DATA_REG(chan)); /* write high byte */ - outb((data[n] & 0xf00) >> 8, iobase + 4 + 2 * chan); - inb(iobase + 4 + 2 * chan); /* trig */ + outb((data[n] & 0xf00) >> 8, +dev->iobase + FL512_AO_DATA_REG(chan)); + inb(dev->iobase + FL512_AO_TRIG_REG(chan)); devpriv->ao_readback[chan] = data[n]; } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 7/8] staging: comedi: fl512: tidy up fl512_ao_insn_read()
From: H Hartley Sweeten Tidy up this function. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 30 +- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index 90a8fd9..3bf6d6f 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -52,22 +52,26 @@ static int fl512_ai_insn_read(struct comedi_device *dev, struct comedi_insn *insn, unsigned int *data) { - int n; - unsigned int lo_byte, hi_byte; - char chan = CR_CHAN(insn->chanspec); - - for (n = 0; n < insn->n; n++) { /* sample n times on selected channel */ - /* XXX probably can move next step out of for() loop -- will -* make AI a little bit faster. */ - outb(chan, dev->iobase + FL512_AI_MUX_REG); + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int val; + int i; + + outb(chan, dev->iobase + FL512_AI_MUX_REG); + + for (i = 0; i < insn->n; i++) { outb(0, dev->iobase + FL512_AI_START_CONV_REG); + /* XXX should test "done" flag instead of delay */ - udelay(30); /* sleep 30 usec */ - lo_byte = inb(dev->iobase + FL512_AI_LSB_REG); - hi_byte = inb(dev->iobase + FL512_AI_MSB_REG) & 0xf; - data[n] = lo_byte + (hi_byte << 8); + udelay(30); + + val = inb(dev->iobase + FL512_AI_LSB_REG); + val |= (inb(dev->iobase + FL512_AI_MSB_REG) << 8); + val &= s->maxdata; + + data[i] = val; } - return n; + + return insn->n; } static int fl512_ao_insn_write(struct comedi_device *dev, -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 2/8] staging: comedi: fl512: rename the subdevice (*insn_{read, write}) functions
From: H Hartley Sweeten For aesthetics, rename these functions and remove the unnecessary comments. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 37 ++ 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index a874a88..6eb8941 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -38,12 +38,10 @@ static const struct comedi_lrange range_fl512 = { } }; -/* - * fl512_ai_insn : this is the analog input function - */ -static int fl512_ai_insn(struct comedi_device *dev, -struct comedi_subdevice *s, struct comedi_insn *insn, -unsigned int *data) +static int fl512_ai_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { int n; unsigned int lo_byte, hi_byte; @@ -64,12 +62,10 @@ static int fl512_ai_insn(struct comedi_device *dev, return n; } -/* - * fl512_ao_insn : used to write to a DA port n times - */ -static int fl512_ao_insn(struct comedi_device *dev, -struct comedi_subdevice *s, struct comedi_insn *insn, -unsigned int *data) +static int fl512_ao_insn_write(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { struct fl512_private *devpriv = dev->private; int n; @@ -88,13 +84,10 @@ static int fl512_ao_insn(struct comedi_device *dev, return n; } -/* - * fl512_ao_insn_readback : used to read previous values written to - * DA port - */ -static int fl512_ao_insn_readback(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) +static int fl512_ao_insn_read(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) { struct fl512_private *devpriv = dev->private; int n; @@ -131,7 +124,7 @@ static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->n_chan = 16; s->maxdata = 0x0fff; s->range_table = &range_fl512; - s->insn_read= fl512_ai_insn; + s->insn_read= fl512_ai_insn_read; /* Analog Output subdevice */ s = &dev->subdevices[1]; @@ -140,8 +133,8 @@ static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it) s->n_chan = 2; s->maxdata = 0x0fff; s->range_table = &range_fl512; - s->insn_write = fl512_ao_insn; - s->insn_read= fl512_ao_insn_readback; + s->insn_write = fl512_ao_insn_write; + s->insn_read= fl512_ao_insn_read; return 0; } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 4/8] staging: comedi: fl512: tidy up fl512_ao_insn_read()
From: H Hartley Sweeten For aesthetics, tidy up this function to match the style used in most of the comedi drivers for analog output (*insn_read) functions. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index 4054035..f285110 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -89,13 +89,13 @@ static int fl512_ao_insn_read(struct comedi_device *dev, unsigned int *data) { struct fl512_private *devpriv = dev->private; - int n; - int chan = CR_CHAN(insn->chanspec); + unsigned int chan = CR_CHAN(insn->chanspec); + int i; - for (n = 0; n < insn->n; n++) - data[n] = devpriv->ao_readback[chan]; + for (i = 0; i < insn->n; i++) + data[i] = devpriv->ao_readback[chan]; - return n; + return insn->n; } static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 6/8] staging: comedi: fl512: tidy up fl512_ao_insn_write()
From: H Hartley Sweeten Tidy up this function. Only save the last value written for readback. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 25 + 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index 8cb1f1e..90a8fd9 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -76,20 +76,21 @@ static int fl512_ao_insn_write(struct comedi_device *dev, unsigned int *data) { struct fl512_private *devpriv = dev->private; - int n; - int chan = CR_CHAN(insn->chanspec); /* get chan to write */ - - for (n = 0; n < insn->n; n++) { /* write n data set */ - /* write low byte */ - outb(data[n] & 0x0ff, dev->iobase + FL512_AO_DATA_REG(chan)); - /* write high byte */ - outb((data[n] & 0xf00) >> 8, -dev->iobase + FL512_AO_DATA_REG(chan)); - inb(dev->iobase + FL512_AO_TRIG_REG(chan)); + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int val = devpriv->ao_readback[chan]; + int i; + + for (i = 0; i < insn->n; i++) { + val = data[i]; - devpriv->ao_readback[chan] = data[n]; + /* write LSB, MSB then trigger conversion */ + outb(val & 0x0ff, dev->iobase + FL512_AO_DATA_REG(chan)); + outb((val >> 8) & 0xf, dev->iobase + FL512_AO_DATA_REG(chan)); + inb(dev->iobase + FL512_AO_TRIG_REG(chan)); } - return n; + devpriv->ao_readback[chan] = val; + + return insn->n; } static int fl512_ao_insn_read(struct comedi_device *dev, -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 1/8] staging: comedi: fl512: tidy up subdevice init
From: H Hartley Sweeten Remove the obvious comments and add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/fl512.c | 48 -- 1 file changed, 16 insertions(+), 32 deletions(-) diff --git a/drivers/staging/comedi/drivers/fl512.c b/drivers/staging/comedi/drivers/fl512.c index a5562ea..a874a88 100644 --- a/drivers/staging/comedi/drivers/fl512.c +++ b/drivers/staging/comedi/drivers/fl512.c @@ -124,40 +124,24 @@ static int fl512_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; - /* -* this if the definitions of the supdevices, 2 have been defined -*/ - /* Analog indput */ + /* Analog Input subdevice */ s = &dev->subdevices[0]; - /* define subdevice as Analog In */ - s->type = COMEDI_SUBD_AI; - /* you can read it from userspace */ - s->subdev_flags = SDF_READABLE | SDF_GROUND; - /* Number of Analog input channels */ - s->n_chan = 16; - /* accept only 12 bits of data */ - s->maxdata = 0x0fff; - /* device use one of the ranges */ - s->range_table = &range_fl512; - /* function to call when read AD */ - s->insn_read = fl512_ai_insn; - - /* Analog output */ + s->type = COMEDI_SUBD_AI; + s->subdev_flags = SDF_READABLE | SDF_GROUND; + s->n_chan = 16; + s->maxdata = 0x0fff; + s->range_table = &range_fl512; + s->insn_read= fl512_ai_insn; + + /* Analog Output subdevice */ s = &dev->subdevices[1]; - /* define subdevice as Analog OUT */ - s->type = COMEDI_SUBD_AO; - /* you can write it from userspace */ - s->subdev_flags = SDF_WRITABLE; - /* Number of Analog output channels */ - s->n_chan = 2; - /* accept only 12 bits of data */ - s->maxdata = 0x0fff; - /* device use one of the ranges */ - s->range_table = &range_fl512; - /* function to call when write DA */ - s->insn_write = fl512_ao_insn; - /* function to call when reading DA */ - s->insn_read = fl512_ao_insn_readback; + s->type = COMEDI_SUBD_AO; + s->subdev_flags = SDF_WRITABLE; + s->n_chan = 2; + s->maxdata = 0x0fff; + s->range_table = &range_fl512; + s->insn_write = fl512_ao_insn; + s->insn_read= fl512_ao_insn_readback; return 0; } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 01/12] [media] v4l2: add new V4L2_PIX_FMT_RGB666 pixel format.
That new macro is needed by the imx_drm staging driver for supporting the QVGA display of the eukrea-cpuimx51 board. Signed-off-by: Denis Carikli Acked-by: Mauro Carvalho Chehab Acked-by: Laurent Pinchart Acked-by: Philipp Zabel --- ChangeLog v9->v10: - Rebased on top of: "211e7f2 [media] DocBook media: drop the old incorrect packed RGB table" - Added Philipp Zabel's Ack. ChangeLog v8->v9: - Removed the Cc. They are now set in git-send-email directly. ChangeLog v7->v8: - Added Mauro Carvalho Chehab back to the list of Cc ChangeLog v6->v7: - Shrinked even more the Cc list. ChangeLog v5->v6: - Remove people not concerned by this patch from the Cc list. ChangeLog v3->v4: - Added Laurent Pinchart's Ack. ChangeLog v2->v3: - Added some interested people in the Cc list. - Added Mauro Carvalho Chehab's Ack. - Added documentation. --- .../DocBook/media/v4l/pixfmt-packed-rgb.xml| 39 include/uapi/linux/videodev2.h |1 + 2 files changed, 40 insertions(+) diff --git a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml b/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml index e1c4f8b..88a7fe1 100644 --- a/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml +++ b/Documentation/DocBook/media/v4l/pixfmt-packed-rgb.xml @@ -279,6 +279,45 @@ colorspace V4L2_COLORSPACE_SRGB. + + V4L2_PIX_FMT_RGB666 + 'RGBH' + + r5 + r4 + r3 + r2 + r1 + r0 + g5 + g4 + + g3 + g2 + g1 + g0 + b5 + b4 + b3 + b2 + + b1 + b0 + + + + + + + + + + + + + + + V4L2_PIX_FMT_BGR24 'BGR3' diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h index 4dc7052..efcbc15 100644 --- a/include/uapi/linux/videodev2.h +++ b/include/uapi/linux/videodev2.h @@ -299,6 +299,7 @@ struct v4l2_pix_format { #define V4L2_PIX_FMT_RGB555X v4l2_fourcc('R', 'G', 'B', 'Q') /* 16 RGB-5-5-5 BE */ #define V4L2_PIX_FMT_RGB565X v4l2_fourcc('R', 'G', 'B', 'R') /* 16 RGB-5-6-5 BE */ #define V4L2_PIX_FMT_BGR666 v4l2_fourcc('B', 'G', 'R', 'H') /* 18 BGR-6-6-6 */ +#define V4L2_PIX_FMT_RGB666 v4l2_fourcc('R', 'G', 'B', 'H') /* 18 RGB-6-6-6 */ #define V4L2_PIX_FMT_BGR24 v4l2_fourcc('B', 'G', 'R', '3') /* 24 BGR-8-8-8 */ #define V4L2_PIX_FMT_RGB24 v4l2_fourcc('R', 'G', 'B', '3') /* 24 RGB-8-8-8 */ #define V4L2_PIX_FMT_BGR32 v4l2_fourcc('B', 'G', 'R', '4') /* 32 BGR-8-8-8-8 */ -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 04/12] imx-drm: Match ipu_di_signal_cfg's clk_pol with its description.
According to the datasheet, setting the di0_polarity_disp_clk field in the GENERAL di register sets the output clock polarity to active high. Signed-off-by: Denis Carikli --- ChangeLog v9->v10: - New patch that is now needed by the "staging: imx-drm: Use de-active and pixelclk-active" patch. --- drivers/staging/imx-drm/ipu-v3/ipu-di.c |2 +- drivers/staging/imx-drm/ipuv3-crtc.c|2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-di.c b/drivers/staging/imx-drm/ipu-v3/ipu-di.c index 82a9eba..849b3e1 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-di.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-di.c @@ -595,7 +595,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) } } - if (!sig->clk_pol) + if (sig->clk_pol) di_gen |= DI_GEN_POLARITY_DISP_CLK; ipu_di_write(di, di_gen, DI_GENERAL); diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index a8d0178..db6bd64 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c @@ -158,7 +158,7 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, sig_cfg.Vsync_pol = 1; sig_cfg.enable_pol = 1; - sig_cfg.clk_pol = 1; + sig_cfg.clk_pol = 0; sig_cfg.width = mode->hdisplay; sig_cfg.height = mode->vdisplay; sig_cfg.pixel_fmt = out_pixel_fmt; -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 07/12] drm: drm_display_mode: add signal polarity flags
We need a way to pass signal polarity informations between DRM panels, and the display drivers. To do that, a pol_flags field was added to drm_display_mode. Signed-off-by: Denis Carikli --- ChangeLog v10->v11: - Since the imx-drm won't be able to retrive its regulators from the device tree when using display-timings nodes, and that I was told that the drm simple-panel driver already supported that, I then, instead, added what was lacking to make the eukrea displays work with the drm-simple-panel driver. That required a way to get back the display polarity informations from the imx-drm driver without affecting userspace. --- include/drm/drm_crtc.h |8 1 file changed, 8 insertions(+) diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index f764654..61a4fe1 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -131,6 +131,13 @@ enum drm_mode_status { #define DRM_MODE_FLAG_3D_MAX DRM_MODE_FLAG_3D_SIDE_BY_SIDE_HALF +#define DRM_MODE_FLAG_POL_PIXDATA_NEGEDGE BIT(1) +#define DRM_MODE_FLAG_POL_PIXDATA_POSEDGE BIT(2) +#define DRM_MODE_FLAG_POL_PIXDATA_PRESERVE BIT(3) +#define DRM_MODE_FLAG_POL_DE_NEGEDGE BIT(4) +#define DRM_MODE_FLAG_POL_DE_POSEDGE BIT(5) +#define DRM_MODE_FLAG_POL_DE_PRESERVE BIT(6) + struct drm_display_mode { /* Header */ struct list_head head; @@ -183,6 +190,7 @@ struct drm_display_mode { int vrefresh; /* in Hz */ int hsync; /* in kHz */ enum hdmi_picture_aspect picture_aspect_ratio; + unsigned int pol_flags; }; static inline bool drm_mode_is_stereo(const struct drm_display_mode *mode) -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 03/12] imx-drm: Correct BGR666 and the board's dts that use them.
The current BGR666 is not consistent with the other color mapings like BGR24. BGR666 should be in the same byte order than BGR24. Signed-off-by: Denis Carikli Acked-by: Philipp Zabel --- ChangeLog v9->v10: - Rebased. - Added Philipp Zabel's Ack. - Included Lothar Waßmann's suggestion about imx-ldb.c. - Shortened the patch title ChangeLog v8->v9: - Removed the Cc. They are now set in git-send-email directly. ChangeLog v7->v8: - Shrinked even more the Cc list. ChangeLog v6->v7: - Shrinked even more the Cc list. ChangeLog v5->v6: - Remove people not concerned by this patch from the Cc list. - Added a better explanation of the change. ChangeLog v5: - New patch. --- arch/arm/boot/dts/imx51-apf51dev.dts|2 +- arch/arm/boot/dts/imx53-m53evk.dts |2 +- drivers/staging/imx-drm/imx-ldb.c |4 ++-- drivers/staging/imx-drm/ipu-v3/ipu-dc.c |4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/arch/arm/boot/dts/imx51-apf51dev.dts b/arch/arm/boot/dts/imx51-apf51dev.dts index c5a9a24..7b3851d 100644 --- a/arch/arm/boot/dts/imx51-apf51dev.dts +++ b/arch/arm/boot/dts/imx51-apf51dev.dts @@ -18,7 +18,7 @@ display@di1 { compatible = "fsl,imx-parallel-display"; - interface-pix-fmt = "bgr666"; + interface-pix-fmt = "rgb666"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ipu_disp1>; diff --git a/arch/arm/boot/dts/imx53-m53evk.dts b/arch/arm/boot/dts/imx53-m53evk.dts index f6d3ac3..4646ea9 100644 --- a/arch/arm/boot/dts/imx53-m53evk.dts +++ b/arch/arm/boot/dts/imx53-m53evk.dts @@ -23,7 +23,7 @@ soc { display1: display@di1 { compatible = "fsl,imx-parallel-display"; - interface-pix-fmt = "bgr666"; + interface-pix-fmt = "rgb666"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ipu_disp1>; diff --git a/drivers/staging/imx-drm/imx-ldb.c b/drivers/staging/imx-drm/imx-ldb.c index 33d2b883..e6d7bc7 100644 --- a/drivers/staging/imx-drm/imx-ldb.c +++ b/drivers/staging/imx-drm/imx-ldb.c @@ -185,11 +185,11 @@ static void imx_ldb_encoder_prepare(struct drm_encoder *encoder) switch (imx_ldb_ch->chno) { case 0: pixel_fmt = (ldb->ldb_ctrl & LDB_DATA_WIDTH_CH0_24) ? - V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_BGR666; + V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_RGB666; break; case 1: pixel_fmt = (ldb->ldb_ctrl & LDB_DATA_WIDTH_CH1_24) ? - V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_BGR666; + V4L2_PIX_FMT_RGB24 : V4L2_PIX_FMT_RGB666; break; default: dev_err(ldb->dev, "unable to config di%d panel format\n", diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c index 6f9abe8..154d293 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c @@ -397,9 +397,9 @@ int ipu_dc_init(struct ipu_soc *ipu, struct device *dev, /* bgr666 */ ipu_dc_map_clear(priv, IPU_DC_MAP_BGR666); - ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 0, 5, 0xfc); /* blue */ + ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 0, 17, 0xfc); /* blue */ ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 1, 11, 0xfc); /* green */ - ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 2, 17, 0xfc); /* red */ + ipu_dc_map_config(priv, IPU_DC_MAP_BGR666, 2, 5, 0xfc); /* red */ /* bgr24 */ ipu_dc_map_clear(priv, IPU_DC_MAP_BGR24); -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 02/12] imx-drm: Add RGB666 support for parallel display.
Signed-off-by: Denis Carikli Acked-by: Philipp Zabel --- ChangeLog v8->v9: - Rebased. - Added Philipp Zabel's ack. - Shortened the patch title. ChangeLog v8->v9: - Removed the Cc. They are now set in git-send-email directly. - Rebased. ChangeLog v7->v8: - Shrinked even more the Cc list. ChangeLog v6->v7: - Shrinked even more the Cc list. ChangeLog v5->v6: - Remove people not concerned by this patch from the Cc list. ChangeLog v3->v5: - Use the correct RGB order. ChangeLog v2->v3: - Added some interested people in the Cc list. - Removed the commit message long desciption that was just a copy of the short description. - Rebased the patch. - Fixed a copy-paste error in the ipu_dc_map_clear parameter. --- .../bindings/staging/imx-drm/fsl-imx-drm.txt |3 ++- drivers/staging/imx-drm/ipu-v3/ipu-dc.c|9 + drivers/staging/imx-drm/parallel-display.c |2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt b/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt index 3be5ce7..83137ef 100644 --- a/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt +++ b/Documentation/devicetree/bindings/staging/imx-drm/fsl-imx-drm.txt @@ -60,7 +60,8 @@ Required properties: - compatible: Should be "fsl,imx-parallel-display" Optional properties: - interface_pix_fmt: How this display is connected to the - display interface. Currently supported types: "rgb24", "rgb565", "bgr666" + display interface. Currently supported types: "rgb24", "rgb565", "bgr666", + "rgb666" - edid: verbatim EDID data block describing attached display. - ddc: phandle describing the i2c bus handling the display data channel diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c index d5de8bb..6f9abe8 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-dc.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-dc.c @@ -92,6 +92,7 @@ enum ipu_dc_map { IPU_DC_MAP_GBR24, /* TVEv2 */ IPU_DC_MAP_BGR666, IPU_DC_MAP_BGR24, + IPU_DC_MAP_RGB666, }; struct ipu_dc { @@ -155,6 +156,8 @@ static int ipu_pixfmt_to_map(u32 fmt) return IPU_DC_MAP_BGR666; case V4L2_PIX_FMT_BGR24: return IPU_DC_MAP_BGR24; + case V4L2_PIX_FMT_RGB666: + return IPU_DC_MAP_RGB666; default: return -EINVAL; } @@ -404,6 +407,12 @@ int ipu_dc_init(struct ipu_soc *ipu, struct device *dev, ipu_dc_map_config(priv, IPU_DC_MAP_BGR24, 1, 15, 0xff); /* green */ ipu_dc_map_config(priv, IPU_DC_MAP_BGR24, 0, 23, 0xff); /* blue */ + /* rgb666 */ + ipu_dc_map_clear(priv, IPU_DC_MAP_RGB666); + ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 0, 5, 0xfc); /* blue */ + ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 1, 11, 0xfc); /* green */ + ipu_dc_map_config(priv, IPU_DC_MAP_RGB666, 2, 17, 0xfc); /* red */ + return 0; } diff --git a/drivers/staging/imx-drm/parallel-display.c b/drivers/staging/imx-drm/parallel-display.c index c60b6c6..01b7ce5 100644 --- a/drivers/staging/imx-drm/parallel-display.c +++ b/drivers/staging/imx-drm/parallel-display.c @@ -219,6 +219,8 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) imxpd->interface_pix_fmt = V4L2_PIX_FMT_RGB565; else if (!strcmp(fmt, "bgr666")) imxpd->interface_pix_fmt = V4L2_PIX_FMT_BGR666; + else if (!strcmp(fmt, "rgb666")) + imxpd->interface_pix_fmt = V4L2_PIX_FMT_RGB666; } panel_node = of_parse_phandle(np, "fsl,panel", 0); -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 05/12] imx-drm: use defines for clock polarity settings
Signed-off-by: Denis Carikli --- ChangeLog v9->v10: - New patch which was splitted out from: "staging: imx-drm: Use de-active and pixelclk-active display-timings.". - Fixes many issues in "staging: imx-drm: Use de-active and pixelclk-active display-timings.": - More clear meaning of the polarity settings. - The SET_CLK_POL and SET_DE_POL masks are not needed anymore. --- drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h |8 +++- drivers/staging/imx-drm/ipu-v3/ipu-di.c |4 ++-- drivers/staging/imx-drm/ipuv3-crtc.c|4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h b/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h index c4d14ea..b95cba1 100644 --- a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h +++ b/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h @@ -27,6 +27,12 @@ enum ipuv3_type { #define IPU_PIX_FMT_GBR24 v4l2_fourcc('G', 'B', 'R', '3') +#define CLK_POL_ACTIVE_LOW 0 +#define CLK_POL_ACTIVE_HIGH1 + +#define ENABLE_POL_NEGEDGE 0 +#define ENABLE_POL_POSEDGE 1 + /* * Bitfield of Display Interface signal polarities. */ @@ -37,7 +43,7 @@ struct ipu_di_signal_cfg { unsigned clksel_en:1; unsigned clkidle_en:1; unsigned data_pol:1;/* true = inverted */ - unsigned clk_pol:1; /* true = rising edge */ + unsigned clk_pol:1; unsigned enable_pol:1; unsigned Hsync_pol:1; /* true = active high */ unsigned Vsync_pol:1; diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-di.c b/drivers/staging/imx-drm/ipu-v3/ipu-di.c index 849b3e1..53646aa 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-di.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-di.c @@ -595,7 +595,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) } } - if (sig->clk_pol) + if (sig->clk_pol == CLK_POL_ACTIVE_HIGH) di_gen |= DI_GEN_POLARITY_DISP_CLK; ipu_di_write(di, di_gen, DI_GENERAL); @@ -606,7 +606,7 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) reg = ipu_di_read(di, DI_POL); reg &= ~(DI_POL_DRDY_DATA_POLARITY | DI_POL_DRDY_POLARITY_15); - if (sig->enable_pol) + if (sig->enable_pol == ENABLE_POL_POSEDGE) reg |= DI_POL_DRDY_POLARITY_15; if (sig->data_pol) reg |= DI_POL_DRDY_DATA_POLARITY; diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index db6bd64..8cfeb47 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c @@ -157,8 +157,8 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, if (mode->flags & DRM_MODE_FLAG_PVSYNC) sig_cfg.Vsync_pol = 1; - sig_cfg.enable_pol = 1; - sig_cfg.clk_pol = 0; + sig_cfg.enable_pol = ENABLE_POL_POSEDGE; + sig_cfg.clk_pol = CLK_POL_ACTIVE_LOW; sig_cfg.width = mode->hdisplay; sig_cfg.height = mode->vdisplay; sig_cfg.pixel_fmt = out_pixel_fmt; -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 08/12] imx-drm: Use drm_display_mode timings flags.
The previous hardware behaviour was kept if the flags are not set. Signed-off-by: Denis Carikli --- ChangeLog v10->v11: - This patch was splitted-out and adapted from: "Prepare imx-drm for extra display-timings retrival." - The display-timings dt specific part was removed. - The flags names were changed to use the DRM ones from: "drm: drm_display_mode: add signal polarity flags" --- drivers/staging/imx-drm/imx-drm-core.c | 10 ++ drivers/staging/imx-drm/imx-drm.h |6 ++ drivers/staging/imx-drm/imx-hdmi.c |3 +++ drivers/staging/imx-drm/imx-ldb.c |3 +++ drivers/staging/imx-drm/imx-tve.c |3 +++ drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h |6 -- drivers/staging/imx-drm/ipu-v3/ipu-di.c |7 ++- drivers/staging/imx-drm/ipuv3-crtc.c| 21 +++-- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h b/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h index b95cba1..3abeea3 100644 --- a/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h +++ b/drivers/staging/imx-drm/ipu-v3/imx-ipu-v3.h @@ -29,9 +29,11 @@ enum ipuv3_type { #define CLK_POL_ACTIVE_LOW 0 #define CLK_POL_ACTIVE_HIGH1 +#define CLK_POL_PRESERVE 2 #define ENABLE_POL_NEGEDGE 0 #define ENABLE_POL_POSEDGE 1 +#define ENABLE_POL_PRESERVE2 /* * Bitfield of Display Interface signal polarities. @@ -43,10 +45,10 @@ struct ipu_di_signal_cfg { unsigned clksel_en:1; unsigned clkidle_en:1; unsigned data_pol:1;/* true = inverted */ - unsigned clk_pol:1; - unsigned enable_pol:1; unsigned Hsync_pol:1; /* true = active high */ unsigned Vsync_pol:1; + u8 clk_pol; + u8 enable_pol; u16 width; u16 height; diff --git a/drivers/staging/imx-drm/ipu-v3/ipu-di.c b/drivers/staging/imx-drm/ipu-v3/ipu-di.c index 53646aa..791080b 100644 --- a/drivers/staging/imx-drm/ipu-v3/ipu-di.c +++ b/drivers/staging/imx-drm/ipu-v3/ipu-di.c @@ -597,6 +597,8 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) if (sig->clk_pol == CLK_POL_ACTIVE_HIGH) di_gen |= DI_GEN_POLARITY_DISP_CLK; + else if (sig->clk_pol == CLK_POL_ACTIVE_LOW) + di_gen &= ~DI_GEN_POLARITY_DISP_CLK; ipu_di_write(di, di_gen, DI_GENERAL); @@ -604,10 +606,13 @@ int ipu_di_init_sync_panel(struct ipu_di *di, struct ipu_di_signal_cfg *sig) DI_SYNC_AS_GEN); reg = ipu_di_read(di, DI_POL); - reg &= ~(DI_POL_DRDY_DATA_POLARITY | DI_POL_DRDY_POLARITY_15); + reg &= ~(DI_POL_DRDY_DATA_POLARITY); if (sig->enable_pol == ENABLE_POL_POSEDGE) reg |= DI_POL_DRDY_POLARITY_15; + else if (sig->enable_pol == ENABLE_POL_NEGEDGE) + reg &= ~DI_POL_DRDY_POLARITY_15; + if (sig->data_pol) reg |= DI_POL_DRDY_DATA_POLARITY; diff --git a/drivers/staging/imx-drm/ipuv3-crtc.c b/drivers/staging/imx-drm/ipuv3-crtc.c index 8cfeb47..c75034e 100644 --- a/drivers/staging/imx-drm/ipuv3-crtc.c +++ b/drivers/staging/imx-drm/ipuv3-crtc.c @@ -157,8 +157,25 @@ static int ipu_crtc_mode_set(struct drm_crtc *crtc, if (mode->flags & DRM_MODE_FLAG_PVSYNC) sig_cfg.Vsync_pol = 1; - sig_cfg.enable_pol = ENABLE_POL_POSEDGE; - sig_cfg.clk_pol = CLK_POL_ACTIVE_LOW; + if (mode->pol_flags & DRM_MODE_FLAG_POL_PIXDATA_POSEDGE) + sig_cfg.enable_pol = ENABLE_POL_POSEDGE; + else if (mode->pol_flags & DRM_MODE_FLAG_POL_DE_NEGEDGE) + sig_cfg.enable_pol = ENABLE_POL_NEGEDGE; + else if (mode->pol_flags & DRM_MODE_FLAG_POL_PIXDATA_PRESERVE) + sig_cfg.enable_pol = ENABLE_POL_PRESERVE; + else + sig_cfg.enable_pol = ENABLE_POL_POSEDGE; + + if (mode->private_flags & DRM_MODE_FLAG_POL_DE_POSEDGE) + sig_cfg.clk_pol = CLK_POL_ACTIVE_HIGH; + else if (mode->private_flags & DRM_MODE_FLAG_POL_DE_NEGEDGE) + sig_cfg.clk_pol = CLK_POL_ACTIVE_LOW; + else if (mode->private_flags & DRM_MODE_FLAG_POL_DE_PRESERVE) + sig_cfg.clk_pol = CLK_POL_PRESERVE; + else + sig_cfg.clk_pol = CLK_POL_ACTIVE_LOW; + + sig_cfg.width = mode->hdisplay; sig_cfg.height = mode->vdisplay; sig_cfg.pixel_fmt = out_pixel_fmt; -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH v11][ 06/12] ARM: dts: imx5*, imx6*: correct display-timings nodes.
The imx-drm driver can't use the de-active and pixelclk-active display-timings properties yet. Instead the data-enable and the pixel data clock polarity are hardcoded in the imx-drm driver. So theses properties are now set to keep the same behaviour when imx-drm will start using them. Signed-off-by: Denis Carikli --- ChangeLog v9->v10: - New patch that was splitted out of: "staging imx-drm: Use de-active and pixelclk-active display-timings." --- arch/arm/boot/dts/imx51-babbage.dts |2 ++ arch/arm/boot/dts/imx53-m53evk.dts|2 ++ arch/arm/boot/dts/imx53-tx53-x03x.dts |2 +- arch/arm/boot/dts/imx6qdl-gw53xx.dtsi |2 ++ arch/arm/boot/dts/imx6qdl-gw54xx.dtsi |2 ++ arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi |2 ++ arch/arm/boot/dts/imx6qdl-sabreauto.dtsi |2 ++ arch/arm/boot/dts/imx6qdl-sabrelite.dtsi |2 ++ arch/arm/boot/dts/imx6qdl-sabresd.dtsi|2 ++ 9 files changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/dts/imx51-babbage.dts b/arch/arm/boot/dts/imx51-babbage.dts index 9e9deb2..4732a00 100644 --- a/arch/arm/boot/dts/imx51-babbage.dts +++ b/arch/arm/boot/dts/imx51-babbage.dts @@ -38,6 +38,8 @@ vfront-porch = <7>; hsync-len = <60>; vsync-len = <10>; + de-active = <1>; + pixelclk-active = <0>; }; }; diff --git a/arch/arm/boot/dts/imx53-m53evk.dts b/arch/arm/boot/dts/imx53-m53evk.dts index 4646ea9..d6e1046 100644 --- a/arch/arm/boot/dts/imx53-m53evk.dts +++ b/arch/arm/boot/dts/imx53-m53evk.dts @@ -40,6 +40,8 @@ vfront-porch = <9>; vsync-len = <3>; vsync-active = <1>; + de-active = <1>; + pixelclk-active = <0>; }; }; }; diff --git a/arch/arm/boot/dts/imx53-tx53-x03x.dts b/arch/arm/boot/dts/imx53-tx53-x03x.dts index 0217dde3..4092a81 100644 --- a/arch/arm/boot/dts/imx53-tx53-x03x.dts +++ b/arch/arm/boot/dts/imx53-tx53-x03x.dts @@ -93,7 +93,7 @@ hsync-active = <0>; vsync-active = <0>; de-active = <1>; - pixelclk-active = <1>; + pixelclk-active = <0>; }; ET0500 { diff --git a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi index c8e5ae0..43f48f2 100644 --- a/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw53xx.dtsi @@ -494,6 +494,8 @@ vfront-porch = <7>; hsync-len = <60>; vsync-len = <10>; + de-active = <1>; + pixelclk-active = <0>; }; }; }; diff --git a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi index 2795dfc..59ecfd1 100644 --- a/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi +++ b/arch/arm/boot/dts/imx6qdl-gw54xx.dtsi @@ -516,6 +516,8 @@ vfront-porch = <7>; hsync-len = <60>; vsync-len = <10>; + de-active = <1>; + pixelclk-active = <0>; }; }; }; diff --git a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi index 99be301..e9419a2 100644 --- a/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi +++ b/arch/arm/boot/dts/imx6qdl-nitrogen6x.dtsi @@ -349,6 +349,8 @@ vfront-porch = <7>; hsync-len = <60>; vsync-len = <10>; + de-active = <1>; + pixelclk-active = <0>; }; }; }; diff --git a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi index 009abd6..230bbc6 100644 --- a/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabreauto.dtsi @@ -405,6 +405,8 @@ vfront-porch = <7>; hsync-len = <60>; vsync-len = <10>; + de-active = <1>; + pixelclk-active = <0>; }; }; }; diff --git a/arch/arm/boot/dts/imx6qdl-sabrelite.dtsi b/arch/arm/boot/dts/imx6qdl-sa
[PATCH 09/12] drm/panel: Add Eukrea mbimxsd51 displays.
Signed-off-by: Denis Carikli --- ChangeLog v10->v11: - New patch. --- .../bindings/panel/eukrea,mbimxsd51-cmo-qvga.txt |7 ++ .../bindings/panel/eukrea,mbimxsd51-dvi-svga.txt |7 ++ .../bindings/panel/eukrea,mbimxsd51-dvi-vga.txt|7 ++ drivers/gpu/drm/panel/panel-simple.c | 81 4 files changed, 102 insertions(+) create mode 100644 Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-cmo-qvga.txt create mode 100644 Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-svga.txt create mode 100644 Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-vga.txt diff --git a/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-cmo-qvga.txt b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-cmo-qvga.txt new file mode 100644 index 000..03679d0 --- /dev/null +++ b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-cmo-qvga.txt @@ -0,0 +1,7 @@ +Eukrea CMO-QVGA (320x240 pixels) TFT LCD panel + +Required properties: +- compatible: should be "eukrea,mbimxsd51-cmo-qvga" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-svga.txt b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-svga.txt new file mode 100644 index 000..f408c9a --- /dev/null +++ b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-svga.txt @@ -0,0 +1,7 @@ +Eukrea DVI-SVGA (800x600 pixels) DVI output. + +Required properties: +- compatible: should be "eukrea,mbimxsd51-dvi-svga" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-vga.txt b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-vga.txt new file mode 100644 index 000..8ea90da --- /dev/null +++ b/Documentation/devicetree/bindings/panel/eukrea,mbimxsd51-dvi-vga.txt @@ -0,0 +1,7 @@ +Eukrea DVI-VGA (640x480 pixels) DVI output. + +Required properties: +- compatible: should be "eukrea,mbimxsd51-dvi-vga" + +This binding is compatible with the simple-panel binding, which is specified +in simple-panel.txt in this directory. diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 0231945..96918bb 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -361,6 +361,78 @@ static const struct panel_desc chunghwa_claa101wb01 = { }, }; +static const struct drm_display_mode eukrea_mbimxsd51_cmoqvga_mode = { + .clock = 6500, + .hdisplay = 320, + .hsync_start = 320 + 38, + .hsync_end = 320 + 38 + 20, + .htotal = 320 + 38 + 20 + 30, + .vdisplay = 240, + .vsync_start = 240 + 15, + .vsync_end = 240 + 15 + 4, + .vtotal = 240 + 15 + 4 + 3, + .vrefresh = 60, + .pol_flags = DRM_MODE_FLAG_POL_PIXDATA_NEGEDGE | +DRM_MODE_FLAG_POL_DE_NEGEDGE, +}; + +static const struct panel_desc eukrea_mbimxsd51_cmoqvga = { + .modes = &eukrea_mbimxsd51_cmoqvga_mode, + .num_modes = 1, + .size = { + .width = 73, + .height = 56, + }, +}; + +static const struct drm_display_mode eukrea_mbimxsd51_dvisvga_mode = { + .clock = 44333, + .hdisplay = 800, + .hsync_start = 800 + 112, + .hsync_end = 800 + 112 + 32, + .htotal = 800 + 112 + 32 + 80, + .vdisplay = 600, + .vsync_start = 600 + 3, + .vsync_end = 600 + 3 + 17, + .vtotal = 600 + 3 + 17 + 4, + .vrefresh = 60, + .pol_flags = DRM_MODE_FLAG_POL_PIXDATA_POSEDGE | +DRM_MODE_FLAG_POL_DE_POSEDGE, +}; + +static const struct panel_desc eukrea_mbimxsd51_dvisvga = { + .modes = &eukrea_mbimxsd51_dvisvga_mode, + .num_modes = 1, + .size = { + .width = 0, + .height = 0, + }, +}; + +static const struct drm_display_mode eukrea_mbimxsd51_dvivga_mode = { + .clock = 23750, + .hdisplay = 640, + .hsync_start = 640 + 80, + .hsync_end = 640 + 80 + 16, + .htotal = 640 + 80 + 16 + 64, + .vdisplay = 480, + .vsync_start = 480 + 3, + .vsync_end = 480 + 3 + 13, + .vtotal = 480 + 3 + 13 + 4, + .vrefresh = 60, + .pol_flags = DRM_MODE_FLAG_POL_PIXDATA_POSEDGE | +DRM_MODE_FLAG_POL_DE_POSEDGE, +}; + +static const struct panel_desc eukrea_mbimxsd51_dvivga = { + .modes = &eukrea_mbimxsd51_dvivga_mode, + .num_modes = 1, + .size = { + .width = 0, + .height = 0, + }, +}; + static const struct drm_display_mode lg_lp129qe_mode = { .clock = 285250, .hdisplay = 2560, @@ -413,6 +485,15 @@ static const struct of_device_id platform_of_match[] = { .compatible = "chunghwa,claa101wa01a",
[PATCH 11/12] ARM: dts: mbimx51sd: Add CMO-QVGA backlight support.
Signed-off-by: Denis Carikli --- ChangeLog v9->v11: - Now uses the drm-panel instead of the display-timings. ChangeLog v8->v9: - Removed the Cc. They are now set in git-send-email directly. - The backlight is now on at boot. ChangeLog v6->v7: - Shrinked even more the Cc list. ChangeLog v5->v6: - Reordered the Cc list. ChangeLog v3->v5: - Updated to the new GPIO defines. ChangeLog v2->v3: - Splitted out from the patch that added support for the cpuimx51/mbimxsd51 boards. - This patch now only adds backlight support. - Added some interested people in the Cc list, and removed some people that might be annoyed by the receiving of that patch which is unrelated to their subsystem. --- .../imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts | 10 ++ 1 file changed, 10 insertions(+) diff --git a/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts index 7c280f8..4a3f805 100644 --- a/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts +++ b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts @@ -17,9 +17,19 @@ model = "Eukrea MBIMXSD51 with the CMO-QVGA Display"; compatible = "eukrea,mbimxsd51-baseboard-cmo-qvga", "eukrea,mbimxsd51-baseboard", "eukrea,cpuimx51", "fsl,imx51"; + backlight: backlight { + compatible = "gpio-backlight"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_backlight_1>; + gpios = <&gpio3 4 GPIO_ACTIVE_HIGH>; + default-brightness-level = <1>; + default-on; + }; + panel: panel { compatible = "eukrea,mbimxsd51-cmo-qvga", "simple-panel"; power-supply = <®_lcd_3v3>; + backlight = <&backlight>; }; reg_lcd_3v3: lcd-en { -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 10/12] ARM: dts: mbimx51sd: Add display support.
The CMO-QVGA, DVI-SVGA and DVI-VGA are added. Signed-off-by: Denis Carikli --- ChangeLog v10->v11: - Now uses the drm-panel instead of the display-timings. This is to get regulator support, which is lacking in the imx-drm driver when using the display-timings. ChangeLog v9->v10: - Rebased - Now enables the cmo-qvga regulator at boot. ChangeLog v8->v9: - Removed the Cc. They are now set in git-send-email directly. - updated pixelclk-active after the following patch: "imx-drm: Match ipu_di_signal_cfg's clk_pol with its description." ChangeLog v7->v8: - Rebased the patch: added the now required imx-drm node. - Adapted the svga clock-frequency value in order to still be able to display an image after the following commit: "imx-drm: ipu-v3: more inteligent DI clock selection" ChangeLog v6->v7: - Shrinked even more the Cc list. - Since the pingrp headers were removed, the references to it where replaced by the actual pins. - Added the targets to arch/arm/boot/dts/Makefile ChangeLog v5->v6: - Reordered the Cc list. ChangeLog v3->v5: - Updated to new GPIO defines. - Updated to new licenses checkpatch requirements. - one whitespace cleanup. ChangeLog v2->v3: - Splitted out from the patch that added support for the cpuimx51/mbimxsd51 boards. - This patch now only adds display support. - Added some interested people in the Cc list, and removed some people that might be annoyed by the receiving of that patch which is unrelated to their subsystem. - rebased and reworked the dts displays addition. - Also rebased and reworked the fsl,pins usage. --- arch/arm/boot/dts/Makefile |3 ++ .../imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts | 41 .../imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dts | 28 +++ .../imx51-eukrea-mbimxsd51-baseboard-dvi-vga.dts | 28 +++ .../boot/dts/imx51-eukrea-mbimxsd51-baseboard.dts | 49 5 files changed, 149 insertions(+) create mode 100644 arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts create mode 100644 arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dts create mode 100644 arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-dvi-vga.dts diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile index cf6c523..1f18800 100644 --- a/arch/arm/boot/dts/Makefile +++ b/arch/arm/boot/dts/Makefile @@ -178,6 +178,9 @@ dtb-$(CONFIG_ARCH_MXC) += \ imx51-apf51dev.dtb \ imx51-babbage.dtb \ imx51-eukrea-mbimxsd51-baseboard.dtb \ + imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dtb \ + imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dtb \ + imx51-eukrea-mbimxsd51-baseboard-dvi-vga.dtb \ imx53-ard.dtb \ imx53-m53evk.dtb \ imx53-mba53.dtb \ diff --git a/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts new file mode 100644 index 000..7c280f8 --- /dev/null +++ b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-cmo-qvga.dts @@ -0,0 +1,41 @@ +/* + * Copyright 2013 Eukréa Electromatique + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ + +#include "imx51-eukrea-mbimxsd51-baseboard.dts" + +/ { + model = "Eukrea MBIMXSD51 with the CMO-QVGA Display"; + compatible = "eukrea,mbimxsd51-baseboard-cmo-qvga", "eukrea,mbimxsd51-baseboard", "eukrea,cpuimx51", "fsl,imx51"; + + panel: panel { + compatible = "eukrea,mbimxsd51-cmo-qvga", "simple-panel"; + power-supply = <®_lcd_3v3>; + }; + + reg_lcd_3v3: lcd-en { + compatible = "regulator-fixed"; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_reg_lcd_3v3>; + regulator-name = "lcd-3v3"; + regulator-min-microvolt = <330>; + regulator-max-microvolt = <330>; + gpio = <&gpio3 13 GPIO_ACTIVE_HIGH>; + enable-active-high; + regulator-boot-on; + }; +}; + +&display { + status = "okay"; + fsl,panel = <&panel>; +}; diff --git a/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dts b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dts new file mode 100644 index 000..323ebf4 --- /dev/null +++ b/arch/arm/boot/dts/imx51-eukrea-mbimxsd51-baseboard-dvi-svga.dts @@ -0,0 +1,28 @@ +/* + * Copyright 2013 Eukréa Electromatique + * + * This program is free software; you can redistribute it and/or + * modify
[PATCH 12/12] ARM: imx_v6_v7_defconfig: Add more drm drivers.
The DRM_PANEL_SIMPLE is needed by the eukrea mbimxsd51's displays. Signed-off-by: Denis Carikli --- - New patch, splitting it would be overkill. --- arch/arm/configs/imx_v6_v7_defconfig |2 ++ 1 file changed, 2 insertions(+) diff --git a/arch/arm/configs/imx_v6_v7_defconfig b/arch/arm/configs/imx_v6_v7_defconfig index 09e9743..0316926 100644 --- a/arch/arm/configs/imx_v6_v7_defconfig +++ b/arch/arm/configs/imx_v6_v7_defconfig @@ -183,6 +183,7 @@ CONFIG_V4L_MEM2MEM_DRIVERS=y CONFIG_VIDEO_CODA=y CONFIG_SOC_CAMERA_OV2640=y CONFIG_DRM=y +CONFIG_DRM_PANEL_SIMPLE=y CONFIG_BACKLIGHT_LCD_SUPPORT=y CONFIG_LCD_CLASS_DEVICE=y CONFIG_LCD_L4F00242T03=y @@ -245,6 +246,7 @@ CONFIG_DRM_IMX_TVE=y CONFIG_DRM_IMX_LDB=y CONFIG_DRM_IMX_IPUV3_CORE=y CONFIG_DRM_IMX_IPUV3=y +CONFIG_DRM_IMX_HDMI=y CONFIG_COMMON_CLK_DEBUG=y # CONFIG_IOMMU_SUPPORT is not set CONFIG_PWM=y -- 1.7.9.5 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
work on Alcor Micro AU6601
Hello all, i have a ultrabook with Alcor Micro AU6601 pcie card reader. Suddenly there is no driver for it, so i would like to make one. If i see it correctly, Alcor Micro don't wont to be contacted by any one except OEMs. I started collecting all possible information https://wikidevi.com/wiki/Alcor_Micro_AU6601 and already did some RE with documenting registers which i was able to find: https://docs.google.com/document/d/1jnRACLJn14jBpKuYBa4i0OvmwZ9qD8xm1xnIo4H0gGk/pub All this makes fun, but i still ask my self if using legals ways will work too :) Can some body help me contact Alcor Micro? -- Regards, Oleksij ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] Staging: lustre: fld: removed parentheses from return statement.
I removed the useless parentheses from a return statement for a warning fix. Return not a function. Signed-off-by: Gary Alan Rookard --- On branch staging-next drivers/staging/lustre/lustre/fld/fld_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 4474537..0d2a9ab 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -330,7 +330,7 @@ EXPORT_SYMBOL(fld_client_proc_fini); static inline int hash_is_sane(int hash) { - return (hash >= 0 && hash < ARRAY_SIZE(fld_hash)); + return hash >= 0 && hash < ARRAY_SIZE(fld_hash); } int fld_client_init(struct lu_client_fld *fld, -- 1.9.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH] Staging: lustre: fld: removed parentheses from return statement.
I removed the useless parentheses from a return statement for a warning fix. Return not a function. Signed-off-by: Gary Alan Rookard --- On branch staging-next drivers/staging/lustre/lustre/fld/fld_request.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 4474537..0d2a9ab 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -330,7 +330,7 @@ EXPORT_SYMBOL(fld_client_proc_fini); static inline int hash_is_sane(int hash) { - return (hash >= 0 && hash < ARRAY_SIZE(fld_hash)); + return hash >= 0 && hash < ARRAY_SIZE(fld_hash); } int fld_client_init(struct lu_client_fld *fld, -- 1.9.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Re: [PATCH 0/8] staging: comedi: fl512: clean up driver
On 2014-03-13 17:09, H Hartley Sweeten wrote: I have been unable to locate any data on this board so I am unable to add any of the missing features. This clean up just gets the driver inline with the other cleaned up comedi drivers. H Hartley Sweeten (8): staging: comedi: fl512: tidy up subdevice init staging: comedi: fl512: rename the subdevice (*insn_{read,write}) functions staging: comedi: fl512: remove Fl512_SIZE define staging: comedi: fl512: tidy up fl512_ao_insn_read() staging: comedi: fl512: define the register map staging: comedi: fl512: tidy up fl512_ao_insn_write() staging: comedi: fl512: tidy up fl512_ao_insn_read() staging: comedi: fl512: tidy up the multi-line comments drivers/staging/comedi/drivers/fl512.c | 203 + 1 file changed, 103 insertions(+), 100 deletions(-) Reviewed-by: Ian Abbott -- -=( Ian Abbott @ MEV Ltd.E-mail: )=- -=( Tel: +44 (0)161 477 1898 FAX: +44 (0)161 718 3587 )=- ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 3/6] Staging: unisys: uislib: Cleanup sparse warnings in uislib
Clean up code to get rid of sparse warnings, mostly related to accessing I/O space. Remove uislibcmpxchg64() and use cmpxchg() instead. Signed-off-by: Ken Cox --- drivers/staging/unisys/include/uisqueue.h | 56 +++ drivers/staging/unisys/include/uisutils.h | 8 ++--- drivers/staging/unisys/uislib/uisqueue.c | 12 +++ 3 files changed, 22 insertions(+), 54 deletions(-) diff --git a/drivers/staging/unisys/include/uisqueue.h b/drivers/staging/unisys/include/uisqueue.h index a9d95d3..6dab390 100644 --- a/drivers/staging/unisys/include/uisqueue.h +++ b/drivers/staging/unisys/include/uisqueue.h @@ -34,7 +34,7 @@ struct uisqueue_info { - pCHANNEL_HEADER chan; + CHANNEL_HEADER __iomem *chan; /* channel containing queues in which scsi commands & * responses are queued */ @@ -75,9 +75,9 @@ struct uisqueue_info { ".previous\n" \ "661:\n\tlock; " -unsigned long long uisqueue_InterlockedOr(volatile unsigned long long *Target, +unsigned long long uisqueue_InterlockedOr(unsigned long long __iomem *Target, unsigned long long Set); -unsigned long long uisqueue_InterlockedAnd(volatile unsigned long long *Target, +unsigned long long uisqueue_InterlockedAnd(unsigned long long __iomem *Target, unsigned long long Set); unsigned int uisqueue_send_int_if_needed(struct uisqueue_info *pqueueinfo, @@ -133,7 +133,7 @@ struct extport_info { }; struct device_info { - void *chanptr; + void __iomem *chanptr; U64 channelAddr; U64 channelBytes; GUID channelTypeGuid; @@ -164,7 +164,7 @@ struct bus_info { struct device_info **device; U64 guestHandle, recvBusInterruptHandle; GUID busInstGuid; - ULTRA_VBUS_CHANNEL_PROTOCOL *pBusChannel; + ULTRA_VBUS_CHANNEL_PROTOCOL __iomem *pBusChannel; int busChannelBytes; struct proc_dir_entry *proc_dir;/* proc/uislib/vbus/ */ struct proc_dir_entry *proc_info; /* proc/uislib/vbus//info */ @@ -352,8 +352,8 @@ typedef enum { } GUESTPART_MSG_TYPE; struct add_vbus_guestpart { - void *chanptr; /* pointer to data channel for bus - -* NOT YET USED */ + void __iomem *chanptr; /* pointer to data channel for bus - +* NOT YET USED */ U32 busNo; /* bus number to be created/deleted */ U32 deviceCount;/* max num of devices on bus */ GUID busTypeGuid; /* indicates type of bus */ @@ -368,7 +368,7 @@ struct del_vbus_guestpart { }; struct add_virt_guestpart { - void *chanptr; /* pointer to data channel */ + void __iomem *chanptr; /* pointer to data channel */ U32 busNo; /* bus number for the operation */ U32 deviceNo; /* number of device on the bus */ GUID devInstGuid; /* instance guid for device */ @@ -382,15 +382,15 @@ struct add_virt_guestpart { }; struct pause_virt_guestpart { - void *chanptr; /* pointer to data channel */ + void __iomem *chanptr; /* pointer to data channel */ }; struct resume_virt_guestpart { - void *chanptr; /* pointer to data channel */ + void __iomem *chanptr; /* pointer to data channel */ }; struct del_virt_guestpart { - void *chanptr; /* pointer to data channel */ + void __iomem *chanptr; /* pointer to data channel */ }; struct init_chipset_guestpart { @@ -435,38 +435,6 @@ struct guest_msgs { * guests. */ -static inline unsigned long -uislibcmpxchg64(volatile void *ptr, unsigned long old, unsigned long new, - int size) -{ - unsigned long prev; - switch (size) { - case 1: - __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgb %b1,%2":"=a"(prev) - : "q"(new), "m"(*__xg(ptr)), -"0"(old) - : "memory"); - return prev; - case 2: - __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgw %w1,%2":"=a"(prev) - : "r"(new), "m"(*__xg(ptr)), -"0"(old) - : "memory"); - return prev; - case 4: - __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgl %k1,%2":"=a"(prev) - : "r"(new), "m"(*__xg(ptr)), -"0"(old) - : "memory"); - return prev; - case 8: - __asm__ __volatile__(UISLIB_LOCK_PREFIX "cmpxchgq %1,%2":"=a"(prev) - : "r"(new), "m"(*__xg(ptr)), -"0"(old) - : "memory");
[patch 0/6] Staging: unisys: Clean sparse warnings in unisys driver code
This series cleans up many sparse warnings in the unisys driver code. There are still some sparse warnings that will be cleaned up in a future patch, but the majority of the warnings are addressed by these patches. ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 4/6] Staging: unisys: visorchannel: Clean up sparse warnings in visorchannel code
Clean up code to get rid of sparse warnings, mostly due to accessing I/O space. Remove visorchannel_get_safe_queue(), visorchannel_safesignalremove(), and visorchannel_safesignalinsert() since they were not called from anywhere. Signed-off-by: Ken Cox --- drivers/staging/unisys/visorchannel/visorchannel.h | 2 +- .../unisys/visorchannel/visorchannel_funcs.c | 136 - 2 files changed, 1 insertion(+), 137 deletions(-) diff --git a/drivers/staging/unisys/visorchannel/visorchannel.h b/drivers/staging/unisys/visorchannel/visorchannel.h index 4546686..62d29a2 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel.h +++ b/drivers/staging/unisys/visorchannel/visorchannel.h @@ -92,7 +92,7 @@ void *visorchannel_get_header(VISORCHANNEL *channel); do {\ U8 *p = (U8 *)visorchannel_get_header(chan);\ if (p) {\ - ULTRA_CHANNEL_CLIENT_TRANSITION(p, chanId, CliStateOS, \ + ULTRA_CHANNEL_CLIENT_TRANSITION(p, chanId, \ newstate, logCtx); \ visorchannel_write \ (chan, \ diff --git a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c index 2695649..611be77 100644 --- a/drivers/staging/unisys/visorchannel/visorchannel_funcs.c +++ b/drivers/staging/unisys/visorchannel/visorchannel_funcs.c @@ -207,24 +207,6 @@ visorchannel_get_memregion(VISORCHANNEL *channel) } EXPORT_SYMBOL_GPL(visorchannel_get_memregion); -pSIGNAL_QUEUE_HEADER -visorchannel_get_safe_queue(VISORCHANNEL *pchannel, U32 queue) -{ - switch (queue) { - case 0: - return &pchannel->safe_uis_queue.req_queue; - case 1: - return &pchannel->safe_uis_queue.rsp_queue; - case 2: - return &pchannel->safe_uis_queue.event_queue; - case 3: - return &pchannel->safe_uis_queue.ack_queue; - default: - ERRDRV("Invalid queue value %d\n", queue); - return NULL; - } -} /* end visorchannel_get_safe_queue */ - int visorchannel_read(VISORCHANNEL *channel, ulong offset, void *local, ulong nbytes) @@ -435,60 +417,6 @@ Away: EXPORT_SYMBOL_GPL(visorchannel_signalremove); BOOL -visorchannel_safesignalremove(VISORCHANNEL *channel, U32 queue, void *msg) -{ - BOOL rc = FALSE; - SIGNAL_QUEUE_HEADER *psafe_sqh, unsafe_sqh; - int stat; - - if (channel->needs_lock) - spin_lock(&channel->remove_lock); - - if (!sig_read_header(channel, queue, &unsafe_sqh)) - RETBOOL(FALSE); - - psafe_sqh = visorchannel_get_safe_queue(channel, queue); - if (psafe_sqh == NULL) { - ERRDRV("safesignalremove: get_safe_queue failed\n"); - RETBOOL(FALSE); - } - - stat = - safe_sig_queue_validate(psafe_sqh, &unsafe_sqh, &unsafe_sqh.Head, - &unsafe_sqh.Tail); - if (stat == 0) { - ERRDRV("safe_signal_remove: safe_sig_queue_validate failed, queue = %d", -queue); - RETBOOL(FALSE); - } - - if (unsafe_sqh.Head == unsafe_sqh.Tail) - RETBOOL(FALSE); /* no signals to remove */ - unsafe_sqh.Tail = (unsafe_sqh.Tail + 1) % psafe_sqh->MaxSignalSlots; - if (!sig_read_data(channel, queue, psafe_sqh, unsafe_sqh.Tail, msg)) - FAIL("sig_read_data failed", FALSE); - unsafe_sqh.NumSignalsReceived++; - - /* For each data field in SIGNAL_QUEUE_HEADER that was modified, -* update host memory. -*/ - MEMORYBARRIER; - if (!SIG_WRITE_FIELD(channel, queue, &unsafe_sqh, Tail)) - FAIL("visor_memregion_write of Tail failed", FALSE); - if (!SIG_WRITE_FIELD(channel, queue, &unsafe_sqh, NumSignalsReceived)) - FAIL("visor_memregion_write of NumSignalsReceived failed", -FALSE); - - RETBOOL(TRUE); - -Away: - if (channel->needs_lock) - spin_unlock(&channel->remove_lock); - - return rc; -} /* end visorchannel_safesignalremove */ - -BOOL visorchannel_signalinsert(VISORCHANNEL *channel, U32 queue, void *msg) { BOOL rc = FALSE; @@ -566,70 +494,6 @@ visorchannel_signalqueue_max_slots(VISORCHANNEL *channel, U32 queue) } EXPORT_SYMBOL_GPL(visorchannel_signalqueue_max_slots); -BOOL -visorchannel_safesignalinsert(VISORCHANNEL *channel, U32 queue, void *msg) -{ - BOOL rc = FALSE; - SIGNAL_QUEUE_HEADER *psafe_sqh, unsafe_sqh; - int stat; - - if (channel->needs_lock) -
[PATCH 1/6] Staging: unisys: channels: Cleanup sparse warnings
Clean up multiple sparse warnings mostly due to different address spaces when accessing I/O memory. Also, remove SignalRemoveAll(), SignalQueueHasOneElement(), SignalQueueIsFull(), because they were never called. Signed-off-by: Ken Cox --- drivers/staging/unisys/channels/channel.c| 166 +++ drivers/staging/unisys/channels/chanstub.c | 8 +- drivers/staging/unisys/channels/chanstub.h | 4 +- drivers/staging/unisys/include/commontypes.h | 4 + 4 files changed, 49 insertions(+), 133 deletions(-) diff --git a/drivers/staging/unisys/channels/channel.c b/drivers/staging/unisys/channels/channel.c index 39ffe52..f645259 100644 --- a/drivers/staging/unisys/channels/channel.c +++ b/drivers/staging/unisys/channels/channel.c @@ -44,38 +44,41 @@ * 1 if the insertion succeeds, 0 if the queue was full. */ unsigned char -visor_signal_insert(pCHANNEL_HEADER pChannel, U32 Queue, void *pSignal) +visor_signal_insert(CHANNEL_HEADER __iomem *pChannel, U32 Queue, void *pSignal) { - void *psignal; - unsigned int head, tail; - pSIGNAL_QUEUE_HEADER pqhdr = - (pSIGNAL_QUEUE_HEADER) ((char *) pChannel + - pChannel->oChannelSpace) + Queue; + void __iomem *psignal; + unsigned int head, tail, nof; + + SIGNAL_QUEUE_HEADER __iomem *pqhdr = + (SIGNAL_QUEUE_HEADER __iomem *) + ((char __iomem *) pChannel + readq(&pChannel->oChannelSpace)) + + Queue; /* capture current head and tail */ - head = pqhdr->Head; - tail = pqhdr->Tail; + head = readl(&pqhdr->Head); + tail = readl(&pqhdr->Tail); /* queue is full if (head + 1) % n equals tail */ - if (((head + 1) % pqhdr->MaxSignalSlots) == tail) { - pqhdr->NumOverflows++; + if (((head + 1) % readl(&pqhdr->MaxSignalSlots)) == tail) { + nof = readq(&pqhdr->NumOverflows) + 1; + writeq(nof, &pqhdr->NumOverflows); return 0; } /* increment the head index */ - head = (head + 1) % pqhdr->MaxSignalSlots; + head = (head + 1) % readl(&pqhdr->MaxSignalSlots); /* copy signal to the head location from the area pointed to * by pSignal */ - psignal = - (char *) pqhdr + pqhdr->oSignalBase + (head * pqhdr->SignalSize); - MEMCPY(psignal, pSignal, pqhdr->SignalSize); + psignal = (char __iomem *)pqhdr + readq(&pqhdr->oSignalBase) + + (head * readl(&pqhdr->SignalSize)); + MEMCPY_TOIO(psignal, pSignal, readl(&pqhdr->SignalSize)); VolatileBarrier(); - pqhdr->Head = head; + writel(head, &pqhdr->Head); - pqhdr->NumSignalsSent++; + writeq(readq(&pqhdr->NumSignalsSent) + 1, &pqhdr->NumSignalsSent); return 1; } EXPORT_SYMBOL_GPL(visor_signal_insert); @@ -99,36 +102,37 @@ EXPORT_SYMBOL_GPL(visor_signal_insert); * 1 if the removal succeeds, 0 if the queue was empty. */ unsigned char -visor_signal_remove(pCHANNEL_HEADER pChannel, U32 Queue, void *pSignal) +visor_signal_remove(CHANNEL_HEADER __iomem *pChannel, U32 Queue, void *pSignal) { - void *psource; + void __iomem *psource; unsigned int head, tail; - pSIGNAL_QUEUE_HEADER pqhdr = - (pSIGNAL_QUEUE_HEADER) ((char *) pChannel + - pChannel->oChannelSpace) + Queue; + SIGNAL_QUEUE_HEADER __iomem *pqhdr = + (SIGNAL_QUEUE_HEADER __iomem *) ((char __iomem *) pChannel + + readq(&pChannel->oChannelSpace)) + Queue; /* capture current head and tail */ - head = pqhdr->Head; - tail = pqhdr->Tail; + head = readl(&pqhdr->Head); + tail = readl(&pqhdr->Tail); /* queue is empty if the head index equals the tail index */ if (head == tail) { - pqhdr->NumEmptyCnt++; + writeq(readq(&pqhdr->NumEmptyCnt) + 1, &pqhdr->NumEmptyCnt); return 0; } /* advance past the 'empty' front slot */ - tail = (tail + 1) % pqhdr->MaxSignalSlots; + tail = (tail + 1) % readl(&pqhdr->MaxSignalSlots); /* copy signal from tail location to the area pointed to by pSignal */ - psource = - (char *) pqhdr + pqhdr->oSignalBase + (tail * pqhdr->SignalSize); - MEMCPY(pSignal, psource, pqhdr->SignalSize); + psource = (char __iomem *) pqhdr + readq(&pqhdr->oSignalBase) + + (tail * readl(&pqhdr->SignalSize)); + MEMCPY_FROMIO(pSignal, psource, readl(&pqhdr->SignalSize)); VolatileBarrier(); - pqhdr->Tail = tail; + writel(tail, &pqhdr->Tail); - pqhdr->NumSignalsReceived++; + writeq(readq(&pqhdr->NumSignalsReceived) + 1, + &pqhdr->NumSignalsReceived); return 1; } EXPORT_SYMBOL_GPL(visor_signal_remove); @@ -194,59 +198,6 @@ SignalRemoveAll(pCHANNEL_HEADER
[PATCH 2/6] Staging: unisys: Clean multiple sparse warnings
Cleaned up multiple sparse warnings, mostly due to improper access of I/O space. Also declared functions and variables that were only used locally as static. Removed ULTRA_disp_channel_header(), ULTRA_disp_channel(), ULTRA_disp_vnic_channel() because they were never called. Signed-off-by: Ken Cox --- .../unisys/common-spar/include/channels/channel.h | 142 +++-- .../common-spar/include/channels/iochannel.h | 9 +- .../common-spar/include/channels/vbuschannel.h | 46 --- .../unisys/common-spar/include/vbusdeviceinfo.h| 22 ++-- .../unisys/common-spar/include/vmcallinterface.h | 2 +- drivers/staging/unisys/uislib/uislib.c | 115 - drivers/staging/unisys/virthba/virthba.c | 62 - drivers/staging/unisys/virtpci/virtpci.c | 54 +--- 8 files changed, 209 insertions(+), 243 deletions(-) diff --git a/drivers/staging/unisys/common-spar/include/channels/channel.h b/drivers/staging/unisys/common-spar/include/channels/channel.h index 284ac68..aee2041 100644 --- a/drivers/staging/unisys/common-spar/include/channels/channel.h +++ b/drivers/staging/unisys/common-spar/include/channels/channel.h @@ -105,7 +105,7 @@ ULTRA_CHANNELCLI_STRING(U32 v) #define ULTRA_CHANNELSRV_IS_READY(x) ((x) == CHANNELSRV_READY) #define ULTRA_CHANNEL_SERVER_READY(pChannel) \ - (ULTRA_CHANNELSRV_IS_READY((pChannel)->SrvState)) + (ULTRA_CHANNELSRV_IS_READY(readl(&(pChannel)->SrvState))) #define ULTRA_VALID_CHANNELCLI_TRANSITION(o, n) \ (o) == CHANNELCLI_DETACHED) && ((n) == CHANNELCLI_DISABLED)) || \ @@ -144,25 +144,30 @@ ULTRA_CHANNELCLI_STRING(U32 v) line);\ } while (0) -#define ULTRA_CHANNEL_CLIENT_TRANSITION(pChan, chanId, field, \ +#define ULTRA_CHANNEL_CLIENT_TRANSITION(pChan, chanId, \ newstate, logCtx) \ do {\ ULTRA_CHANNEL_CLIENT_CHK_TRANSITION(\ - (((CHANNEL_HEADER *)(pChan))->field), newstate, \ + readl(&(((CHANNEL_HEADER __iomem *) \ +(pChan))->CliStateOS)),\ + newstate, \ chanId, logCtx, __FILE__, __LINE__);\ UltraLogEvent(logCtx, CHANNELSTATE_DIAG_EVENTID_TRANSITOK, \ CHANNELSTATE_DIAG_SEVERITY, \ CHANNELSTATE_DIAG_SUBSYS, \ __func__, __LINE__, \ "%s Channel StateTransition (%s) %s(%d)-->%s(%d) @%s:%d\n", \ - chanId, #field, \ - ULTRA_CHANNELCLI_STRING(((CHANNEL_HEADER *) \ - (pChan))->field), \ - ((CHANNEL_HEADER *)(pChan))->field, \ + chanId, "CliStateOS", \ + ULTRA_CHANNELCLI_STRING( \ + readl(&((CHANNEL_HEADER __iomem *) \ + (pChan))->CliStateOS)), \ + readl(&((CHANNEL_HEADER __iomem *) \ + (pChan))->CliStateOS),\ ULTRA_CHANNELCLI_STRING(newstate),\ newstate, \ PathName_Last_N_Nodes(__FILE__, 4), __LINE__); \ - ((CHANNEL_HEADER *)(pChan))->field = newstate; \ + writel(newstate, &((CHANNEL_HEADER __iomem *) \ + (pChan))->CliStateOS); \ MEMORYBARRIER; \ } while (0) @@ -314,7 +319,7 @@ typedef struct _SIGNAL_QUEUE_HEADER { * is used to pass the EFI_DIAG_CAPTURE_PROTOCOL needed to log messages. */ static inline int -ULTRA_check_channel_client(void *pChannel, +ULTRA_check_channel_client(void __iomem *pChannel, GUID expectedTypeGuid, char *channelName, U64 expectedMinBytes, @@ -324,43 +329,44 @@ ULTRA_check_channel_client(void *pChannel, { if (MEMCMP(&expectedTypeGuid, &Guid0, sizeof(GUID)) != 0) /* caller wants us to verify type GUID */ - if (MEMCMP(&(((CHANNEL_HEADER *) (pChannel))->Type), + if (MEMCMP_IO(&(((CHANNEL_HEADER __iomem *) (pChannel))->Type), &expectedTypeGuid, sizeof(GUID)) != 0) { CHANNEL_G
[PATCH 5/6] Staging: unisys: visorchipset: Clean up sparse warnings in visorchipset code.
Clean up code to get rid of sparse warnings due to accessing I/O space. Also declared functions and variables as static if they are only used locally. Signed-off-by: Ken Cox --- drivers/staging/unisys/visorchipset/controlvm_direct.c | 1 + drivers/staging/unisys/visorchipset/file.c | 1 + drivers/staging/unisys/visorchipset/visorchipset_main.c | 16 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/drivers/staging/unisys/visorchipset/controlvm_direct.c b/drivers/staging/unisys/visorchipset/controlvm_direct.c index 7fbc589..b911ea8 100644 --- a/drivers/staging/unisys/visorchipset/controlvm_direct.c +++ b/drivers/staging/unisys/visorchipset/controlvm_direct.c @@ -21,6 +21,7 @@ #include "globals.h" #include "uisutils.h" +#include "controlvm.h" #define CURRENT_FILE_PC VISOR_CHIPSET_PC_controlvm_direct_c diff --git a/drivers/staging/unisys/visorchipset/file.c b/drivers/staging/unisys/visorchipset/file.c index b0d28a2..7e8bc98 100644 --- a/drivers/staging/unisys/visorchipset/file.c +++ b/drivers/staging/unisys/visorchipset/file.c @@ -24,6 +24,7 @@ #include #include #include "uisutils.h" +#include "file.h" #define CURRENT_FILE_PC VISOR_CHIPSET_PC_file_c diff --git a/drivers/staging/unisys/visorchipset/visorchipset_main.c b/drivers/staging/unisys/visorchipset/visorchipset_main.c index 400cb03..b9c9dea 100644 --- a/drivers/staging/unisys/visorchipset/visorchipset_main.c +++ b/drivers/staging/unisys/visorchipset/visorchipset_main.c @@ -52,9 +52,9 @@ * message, we switch back to fast polling mode. */ #define MIN_IDLE_SECONDS 10 -ulong Poll_jiffies = POLLJIFFIES_CONTROLVMCHANNEL_FAST; -ulong Most_recent_message_jiffies; /* when we got our last -* controlvm message */ +static ulong Poll_jiffies = POLLJIFFIES_CONTROLVMCHANNEL_FAST; +static ulong Most_recent_message_jiffies; /* when we got our last +* controlvm message */ static inline char * NONULLSTR(char *s) { @@ -72,7 +72,7 @@ static U8 chipset_events[MAX_CHIPSET_EVENTS] = { 0, 0 }; static struct delayed_work Periodic_controlvm_work; static struct workqueue_struct *Periodic_controlvm_workqueue; -DEFINE_SEMAPHORE(NotifierLock); +static DEFINE_SEMAPHORE(NotifierLock); typedef struct { CONTROLVM_MESSAGE message; @@ -215,7 +215,7 @@ static const struct file_operations proc_bootToTool_fops = { }; typedef struct { - U8 *ptr;/* pointer to base address of payload pool */ + U8 __iomem *ptr;/* pointer to base address of payload pool */ U64 offset; /* offset from beginning of controlvm * channel to beginning of payload * pool */ U32 bytes; /* number of bytes in payload pool */ @@ -324,7 +324,7 @@ struct putfile_request { int completion_status; }; -atomic_t Visorchipset_cache_buffers_in_use = ATOMIC_INIT(0); +static atomic_t Visorchipset_cache_buffers_in_use = ATOMIC_INIT(0); struct parahotplug_request { struct list_head list; @@ -1344,7 +1344,7 @@ static int initialize_controlvm_payload_info(HOSTADDRESS phys_addr, U64 offset, U32 bytes, CONTROLVM_PAYLOAD_INFO *info) { - U8 *payload = NULL; + U8 __iomem *payload = NULL; int rc = CONTROLVM_RESP_SUCCESS; if (info == NULL) { @@ -1678,7 +1678,7 @@ parahotplug_request_complete(int id, U16 active) /* * Enables or disables a PCI device by kicking off a udev script */ -void +static void parahotplug_process_message(CONTROLVM_MESSAGE *inmsg) { struct parahotplug_request *req; -- 1.8.5.3 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 6/6] Staging: unisys: visorutil: Clean up sparse warnings in visorutil code
Clean up code to get rid of sparse warnings. Also fixed variable length arrays declared on the stack. Signed-off-by: Ken Cox --- drivers/staging/unisys/visorutil/procobjecttree.c | 2 +- drivers/staging/unisys/visorutil/visorkmodutils.c | 6 ++ 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/drivers/staging/unisys/visorutil/procobjecttree.c b/drivers/staging/unisys/visorutil/procobjecttree.c index e4d734e..7c7f001 100644 --- a/drivers/staging/unisys/visorutil/procobjecttree.c +++ b/drivers/staging/unisys/visorutil/procobjecttree.c @@ -150,7 +150,7 @@ MYPROCTYPE *visor_proc_CreateType(struct proc_dir_entry *procDirRoot, type->nNames = 0; type->show_property = show_property; type->procDirRoot = procDirRoot; - if (type->propertyNames != 0) + if (type->propertyNames != NULL) while (type->propertyNames[type->nProperties] != NULL) type->nProperties++; while (type->name[type->nNames] != NULL) diff --git a/drivers/staging/unisys/visorutil/visorkmodutils.c b/drivers/staging/unisys/visorutil/visorkmodutils.c index ed46208..f66acd9 100644 --- a/drivers/staging/unisys/visorutil/visorkmodutils.c +++ b/drivers/staging/unisys/visorutil/visorkmodutils.c @@ -20,8 +20,6 @@ #define MYDRVNAME "timskmodutils" -BOOL Debug_Malloc_Enabled = FALSE; - /** Print the hexadecimal contents of a data buffer to a supplied print buffer. * @param dest the print buffer where text characters will * be written @@ -42,8 +40,8 @@ int visor_hexDumpToBuffer(char *dest, int destSize, char *prefix, char *src, { int i = 0; int pos = 0; - char printable[bytesToDumpPerLine + 1]; - char hex[(bytesToDumpPerLine * 3) + 1]; + char printable[24]; + char hex[64]; char *line = NULL; int linesize = 1000; int linelen = 0; -- 1.8.5.3 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 07/26] staging: comedi: gsc_hpdi: tidy up hpdi_cmd_test()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver and move it so that it is not in the middle of the interrupt support code. Absorb the di_cmd_test() helper and tidy up the function a bit. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 153 ++ 1 file changed, 71 insertions(+), 82 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index c7c20f8..e3bb921 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -218,87 +218,6 @@ static void disable_plx_interrupts(struct comedi_device *dev) writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); } -static int di_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_cmd *cmd) -{ - int err = 0; - int i; - - /* Step 1 : check if triggers are trivially valid */ - - err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW); - err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT); - err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_NOW); - err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT); - err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE); - - if (err) - return 1; - - /* Step 2a : make sure trigger sources are unique */ - - err |= cfc_check_trigger_is_unique(cmd->stop_src); - - /* Step 2b : and mutually compatible */ - - if (err) - return 2; - - /* Step 3: check if arguments are trivially valid */ - - if (!cmd->chanlist_len) { - cmd->chanlist_len = 32; - err |= -EINVAL; - } - err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len); - - switch (cmd->stop_src) { - case TRIG_COUNT: - err |= cfc_check_trigger_arg_min(&cmd->stop_arg, 1); - break; - case TRIG_NONE: - err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); - break; - default: - break; - } - - if (err) - return 3; - - /* step 4: fix up any arguments */ - - if (err) - return 4; - - if (!cmd->chanlist) - return 0; - - for (i = 1; i < cmd->chanlist_len; i++) { - if (CR_CHAN(cmd->chanlist[i]) != i) { - /* XXX could support 8 or 16 channels */ - comedi_error(dev, -"chanlist must be ch 0 to 31 in order"); - err++; - break; - } - } - - if (err) - return 5; - - return 0; -} - -static int hpdi_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, -struct comedi_cmd *cmd) -{ - if (s->io_bits) - return -EINVAL; - else - return di_cmd_test(dev, s, cmd); -} - static inline void hpdi_writel(struct comedi_device *dev, uint32_t bits, unsigned int offset) { @@ -505,6 +424,76 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, return 0; } +static int gsc_hpdi_cmd_test(struct comedi_device *dev, +struct comedi_subdevice *s, +struct comedi_cmd *cmd) +{ + int err = 0; + int i; + + if (s->io_bits) + return -EINVAL; + + /* Step 1 : check if triggers are trivially valid */ + + err |= cfc_check_trigger_src(&cmd->start_src, TRIG_NOW); + err |= cfc_check_trigger_src(&cmd->scan_begin_src, TRIG_EXT); + err |= cfc_check_trigger_src(&cmd->convert_src, TRIG_NOW); + err |= cfc_check_trigger_src(&cmd->scan_end_src, TRIG_COUNT); + err |= cfc_check_trigger_src(&cmd->stop_src, TRIG_COUNT | TRIG_NONE); + + if (err) + return 1; + + /* Step 2a : make sure trigger sources are unique */ + + err |= cfc_check_trigger_is_unique(cmd->stop_src); + + /* Step 2b : and mutually compatible */ + + if (err) + return 2; + + /* Step 3: check if arguments are trivially valid */ + + if (!cmd->chanlist_len || !cmd->chanlist) { + cmd->chanlist_len = 32; + err |= -EINVAL; + } + err |= cfc_check_trigger_arg_is(&cmd->scan_end_arg, cmd->chanlist_len); + + if (cmd->stop_src == TRIG_COUNT) + err |= cfc_check_trigger_arg_min(&cmd->stop_arg, 1); + else/* TRIG_NONE */ + err |= cfc_check_trigger_arg_is(&cmd->stop_arg, 0); + + if (err) + return 3; + + /* step 4: fix up any arguments */ + + if (err) + return 4; + + /* step 5: complain about special chan
[PATCH 05/26] staging: comedi: gsc_hpdi: tidy up setup_dma_descriptors()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver and move it so that it is not in the middle of the async command support code. Tidy up the function a bit. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 99 ++- 1 file changed, 46 insertions(+), 53 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index ed24a7b..b68bc917 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -218,57 +218,6 @@ static void disable_plx_interrupts(struct comedi_device *dev) writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); } -/* setup dma descriptors so a link completes every 'transfer_size' bytes */ -static int setup_dma_descriptors(struct comedi_device *dev, -unsigned int transfer_size) -{ - struct hpdi_private *devpriv = dev->private; - unsigned int buffer_index, buffer_offset; - uint32_t next_bits = PLX_DESC_IN_PCI_BIT | PLX_INTR_TERM_COUNT | - PLX_XFER_LOCAL_TO_PCI; - unsigned int i; - - if (transfer_size > DMA_BUFFER_SIZE) - transfer_size = DMA_BUFFER_SIZE; - transfer_size -= transfer_size % sizeof(uint32_t); - if (transfer_size == 0) - return -1; - - buffer_offset = 0; - buffer_index = 0; - for (i = 0; i < NUM_DMA_DESCRIPTORS && -buffer_index < NUM_DMA_BUFFERS; i++) { - devpriv->dma_desc[i].pci_start_addr = - cpu_to_le32(devpriv->dio_buffer_phys_addr[buffer_index] + - buffer_offset); - devpriv->dma_desc[i].local_start_addr = cpu_to_le32(FIFO_REG); - devpriv->dma_desc[i].transfer_size = - cpu_to_le32(transfer_size); - devpriv->dma_desc[i].next = - cpu_to_le32((devpriv->dma_desc_phys_addr + (i + - 1) * -sizeof(devpriv->dma_desc[0])) | next_bits); - - devpriv->desc_dio_buffer[i] = - devpriv->dio_buffer[buffer_index] + - (buffer_offset / sizeof(uint32_t)); - - buffer_offset += transfer_size; - if (transfer_size + buffer_offset > DMA_BUFFER_SIZE) { - buffer_offset = 0; - buffer_index++; - } - } - devpriv->num_dma_descriptors = i; - /* fix last descriptor to point back to first */ - devpriv->dma_desc[i - 1].next = - cpu_to_le32(devpriv->dma_desc_phys_addr | next_bits); - - devpriv->block_size = transfer_size; - - return transfer_size; -} - static int di_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd) { @@ -558,6 +507,50 @@ static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } +/* setup dma descriptors so a link completes every 'len' bytes */ +static int gsc_hpdi_setup_dma_descriptors(struct comedi_device *dev, + unsigned int len) +{ + struct hpdi_private *devpriv = dev->private; + dma_addr_t phys_addr = devpriv->dma_desc_phys_addr; + uint32_t next_bits = PLX_DESC_IN_PCI_BIT | PLX_INTR_TERM_COUNT | +PLX_XFER_LOCAL_TO_PCI; + unsigned int offset = 0; + unsigned int idx = 0; + unsigned int i; + + if (len > DMA_BUFFER_SIZE) + len = DMA_BUFFER_SIZE; + len -= len % sizeof(uint32_t); + if (len == 0) + return -EINVAL; + + for (i = 0; i < NUM_DMA_DESCRIPTORS && idx < NUM_DMA_BUFFERS; i++) { + devpriv->dma_desc[i].pci_start_addr = + cpu_to_le32(devpriv->dio_buffer_phys_addr[idx] + offset); + devpriv->dma_desc[i].local_start_addr = cpu_to_le32(FIFO_REG); + devpriv->dma_desc[i].transfer_size = cpu_to_le32(len); + devpriv->dma_desc[i].next = cpu_to_le32((phys_addr + + (i + 1) * sizeof(devpriv->dma_desc[0])) | next_bits); + + devpriv->desc_dio_buffer[i] = devpriv->dio_buffer[idx] + + (offset / sizeof(uint32_t)); + + offset += len; + if (len + offset > DMA_BUFFER_SIZE) { + offset = 0; + idx++; + } + } + devpriv->num_dma_descriptors = i; + /* fix last descriptor to point back to first */ + devpriv->dma_desc[i - 1].next = cpu_to_le32(phys_addr | next_bits); + + devpriv->block_size = len; + + return len; +} + static int gsc_hpdi_dio_insn_config(struct comedi_device *de
[PATCH 18/26] staging: comedi: gsc_hpdi: remove 'volatile' from the private data members
From: H Hartley Sweeten As reported by checkpatch.pl, the private data members do not need the volatile tag. Remove them. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index aaf6283..1686c11 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -199,12 +199,12 @@ struct hpdi_private { /* pointer to start of buffers indexed by descriptor */ uint32_t *desc_dio_buffer[NUM_DMA_DESCRIPTORS]; /* index of the dma descriptor that is currently being used */ - volatile unsigned int dma_desc_index; + unsigned int dma_desc_index; unsigned int tx_fifo_size; unsigned int rx_fifo_size; - volatile unsigned long dio_count; + unsigned long dio_count; /* number of bytes at which to generate COMEDI_CB_BLOCK events */ - volatile unsigned int block_size; + unsigned int block_size; }; static void gsc_hpdi_drain_dma(struct comedi_device *dev, unsigned int channel) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 16/26] staging: comedi: gsc_hpdi: remove disable_plx_interrupts()
From: H Hartley Sweeten This helper function is just a simple writel(). Remove it. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 11 ++- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index d9b1491..3762510 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -209,13 +209,6 @@ struct hpdi_private { volatile unsigned int block_size; }; -static void disable_plx_interrupts(struct comedi_device *dev) -{ - struct hpdi_private *devpriv = dev->private; - - writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); -} - static inline void hpdi_writel(struct comedi_device *dev, uint32_t bits, unsigned int offset) { @@ -604,7 +597,7 @@ static void gsc_hpdi_init_plx9080(struct comedi_device *dev) #endif writel(bits, devpriv->plx9080_iobase + PLX_BIGEND_REG); - disable_plx_interrupts(dev); + writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); gsc_hpdi_abort_dma(dev, 0); gsc_hpdi_abort_dma(dev, 1); @@ -743,7 +736,7 @@ static void gsc_hpdi_detach(struct comedi_device *dev) free_irq(dev->irq, dev); if (devpriv) { if (devpriv->plx9080_iobase) { - disable_plx_interrupts(dev); + writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); iounmap(devpriv->plx9080_iobase); } if (devpriv->hpdi_iobase) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 08/26] staging: comedi: gsc_hpdi: rename hpdi_cancel()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index e3bb921..1fc65b1 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -354,7 +354,8 @@ static void abort_dma(struct comedi_device *dev, unsigned int channel) spin_unlock_irqrestore(&dev->spinlock, flags); } -static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) +static int gsc_hpdi_cancel(struct comedi_device *dev, + struct comedi_subdevice *s) { struct hpdi_private *devpriv = dev->private; @@ -729,7 +730,7 @@ static int hpdi_auto_attach(struct comedi_device *dev, s->insn_config = gsc_hpdi_dio_insn_config; s->do_cmd = gsc_hpdi_cmd; s->do_cmdtest = gsc_hpdi_cmd_test; - s->cancel = hpdi_cancel; + s->cancel = gsc_hpdi_cancel; return init_hpdi(dev); } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 04/26] staging: comedi: gsc_hpdi: tidy up dio_config_insn()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver and move it so that it is not in the middle of the async command support code. Absorb the dio_config_block_size() helper function and remove the forward declaration. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 64 +-- 1 file changed, 26 insertions(+), 38 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 7a07c1f..ed24a7b 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -53,7 +53,6 @@ #include "comedi_fc.h" static void abort_dma(struct comedi_device *dev, unsigned int channel); -static int dio_config_block_size(struct comedi_device *dev, unsigned int *data); #define TIMER_BASE 50 /* 20MHz master clock */ #define DMA_BUFFER_SIZE 0x1 @@ -212,26 +211,6 @@ struct hpdi_private { volatile unsigned int block_size; }; -static int dio_config_insn(struct comedi_device *dev, - struct comedi_subdevice *s, - struct comedi_insn *insn, - unsigned int *data) -{ - int ret; - - switch (data[0]) { - case INSN_CONFIG_BLOCK_SIZE: - return dio_config_block_size(dev, data); - default: - ret = comedi_dio_insn_config(dev, s, insn, data, 0x); - if (ret) - return ret; - break; - } - - return insn->n; -} - static void disable_plx_interrupts(struct comedi_device *dev) { struct hpdi_private *devpriv = dev->private; @@ -290,22 +269,6 @@ static int setup_dma_descriptors(struct comedi_device *dev, return transfer_size; } -static int dio_config_block_size(struct comedi_device *dev, unsigned int *data) -{ - unsigned int requested_block_size; - int retval; - - requested_block_size = data[1]; - - retval = setup_dma_descriptors(dev, requested_block_size); - if (retval < 0) - return retval; - - data[1] = retval; - - return 2; -} - static int di_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd) { @@ -595,6 +558,31 @@ static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } +static int gsc_hpdi_dio_insn_config(struct comedi_device *dev, + struct comedi_subdevice *s, + struct comedi_insn *insn, + unsigned int *data) +{ + int ret; + + switch (data[0]) { + case INSN_CONFIG_BLOCK_SIZE: + ret = setup_dma_descriptors(dev, data[1]); + if (ret) + return ret; + + data[1] = ret; + break; + default: + ret = comedi_dio_insn_config(dev, s, insn, data, 0x); + if (ret) + return ret; + break; + } + + return insn->n; +} + static int init_hpdi(struct comedi_device *dev) { struct hpdi_private *devpriv = dev->private; @@ -758,7 +746,7 @@ static int hpdi_auto_attach(struct comedi_device *dev, s->len_chanlist = 32; s->maxdata = 1; s->range_table = &range_digital; - s->insn_config = dio_config_insn; + s->insn_config = gsc_hpdi_dio_insn_config; s->do_cmd = hpdi_cmd; s->do_cmdtest = hpdi_cmd_test; s->cancel = hpdi_cancel; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 01/26] staging: comedi: gsc_hpdi: move the (*auto_attach) and (*detach) functions
From: H Hartley Sweeten Move these functions closer to the comedi_driver declaration. This removes the need for one of the forward declarations. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 221 +++--- 1 file changed, 110 insertions(+), 111 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 5af0f78..28fcda7 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -57,7 +57,6 @@ static int hpdi_cmd(struct comedi_device *dev, struct comedi_subdevice *s); static int hpdi_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_cmd *cmd); static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s); -static irqreturn_t handle_interrupt(int irq, void *d); static int dio_config_block_size(struct comedi_device *dev, unsigned int *data); #define TIMER_BASE 50 /* 20MHz master clock */ @@ -406,116 +405,6 @@ static const struct hpdi_board *hpdi_find_board(struct pci_dev *pcidev) return NULL; } -static int hpdi_auto_attach(struct comedi_device *dev, - unsigned long context_unused) -{ - struct pci_dev *pcidev = comedi_to_pci_dev(dev); - const struct hpdi_board *thisboard; - struct hpdi_private *devpriv; - int i; - int retval; - - thisboard = hpdi_find_board(pcidev); - if (!thisboard) { - dev_err(dev->class_dev, "gsc_hpdi: pci %s not supported\n", - pci_name(pcidev)); - return -EINVAL; - } - dev->board_ptr = thisboard; - dev->board_name = thisboard->name; - - devpriv = comedi_alloc_devpriv(dev, sizeof(*devpriv)); - if (!devpriv) - return -ENOMEM; - - retval = comedi_pci_enable(dev); - if (retval) - return retval; - pci_set_master(pcidev); - - devpriv->plx9080_iobase = pci_ioremap_bar(pcidev, 0); - devpriv->hpdi_iobase = pci_ioremap_bar(pcidev, 2); - if (!devpriv->plx9080_iobase || !devpriv->hpdi_iobase) { - dev_warn(dev->class_dev, "failed to remap io memory\n"); - return -ENOMEM; - } - - init_plx9080(dev); - - /* get irq */ - if (request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, - dev->board_name, dev)) { - dev_warn(dev->class_dev, -"unable to allocate irq %u\n", pcidev->irq); - return -EINVAL; - } - dev->irq = pcidev->irq; - - dev_dbg(dev->class_dev, " irq %u\n", dev->irq); - - /* allocate pci dma buffers */ - for (i = 0; i < NUM_DMA_BUFFERS; i++) { - devpriv->dio_buffer[i] = - pci_alloc_consistent(pcidev, DMA_BUFFER_SIZE, -&devpriv->dio_buffer_phys_addr[i]); - } - /* allocate dma descriptors */ - devpriv->dma_desc = pci_alloc_consistent(pcidev, -sizeof(struct plx_dma_desc) * -NUM_DMA_DESCRIPTORS, -&devpriv->dma_desc_phys_addr); - if (devpriv->dma_desc_phys_addr & 0xf) { - dev_warn(dev->class_dev, -" dma descriptors not quad-word aligned (bug)\n"); - return -EIO; - } - - retval = setup_dma_descriptors(dev, 0x1000); - if (retval < 0) - return retval; - - retval = setup_subdevices(dev); - if (retval < 0) - return retval; - - return init_hpdi(dev); -} - -static void hpdi_detach(struct comedi_device *dev) -{ - struct pci_dev *pcidev = comedi_to_pci_dev(dev); - struct hpdi_private *devpriv = dev->private; - unsigned int i; - - if (dev->irq) - free_irq(dev->irq, dev); - if (devpriv) { - if (devpriv->plx9080_iobase) { - disable_plx_interrupts(dev); - iounmap(devpriv->plx9080_iobase); - } - if (devpriv->hpdi_iobase) - iounmap(devpriv->hpdi_iobase); - /* free pci dma buffers */ - for (i = 0; i < NUM_DMA_BUFFERS; i++) { - if (devpriv->dio_buffer[i]) - pci_free_consistent(pcidev, - DMA_BUFFER_SIZE, - devpriv->dio_buffer[i], - devpriv-> - dio_buffer_phys_addr[i]); - } - /* free dma descriptors */ - if (devpriv->dma_desc) -
[PATCH 21/26] staging: comedi: gsc_hpdi: rename 'hpdi_iobase' in private data
From: H Hartley Sweeten This member in the private data holds the ioremaped PCI BAR2 address which is the primary base address for the boards registers. For aesthetics, rename this member simply 'mmio'. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 46 +++ 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index da9a002..0770ad1 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -185,7 +185,7 @@ static const struct hpdi_board hpdi_boards[] = { struct hpdi_private { void __iomem *plx9080_mmio; - void __iomem *hpdi_iobase; + void __iomem *mmio; uint32_t *dio_buffer[NUM_DMA_BUFFERS]; /* dma buffers */ /* physical addresses of dma buffers */ dma_addr_t dio_buffer_phys_addr[NUM_DMA_BUFFERS]; @@ -264,13 +264,12 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) if ((plx_status & (ICS_DMA0_A | ICS_DMA1_A | ICS_LIA)) == 0) return IRQ_NONE; - hpdi_intr_status = readl(devpriv->hpdi_iobase + INTERRUPT_STATUS_REG); - hpdi_board_status = readl(devpriv->hpdi_iobase + BOARD_STATUS_REG); + hpdi_intr_status = readl(devpriv->mmio + INTERRUPT_STATUS_REG); + hpdi_board_status = readl(devpriv->mmio + BOARD_STATUS_REG); + + if (hpdi_intr_status) + writel(hpdi_intr_status, devpriv->mmio + INTERRUPT_STATUS_REG); - if (hpdi_intr_status) { - writel(hpdi_intr_status, - devpriv->hpdi_iobase + INTERRUPT_STATUS_REG); - } /* spin lock makes sure no one else changes plx dma control reg */ spin_lock_irqsave(&dev->spinlock, flags); dma0_status = readb(devpriv->plx9080_mmio + PLX_DMA0_CS_REG); @@ -334,8 +333,8 @@ static int gsc_hpdi_cancel(struct comedi_device *dev, { struct hpdi_private *devpriv = dev->private; - writel(0, devpriv->hpdi_iobase + BOARD_CONTROL_REG); - writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); + writel(0, devpriv->mmio + BOARD_CONTROL_REG); + writel(0, devpriv->mmio + INTERRUPT_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -354,7 +353,7 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, if (s->io_bits) return -EINVAL; - writel(RX_FIFO_RESET_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); + writel(RX_FIFO_RESET_BIT, devpriv->mmio + BOARD_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -388,13 +387,12 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, /* clear over/under run status flags */ writel(RX_UNDERRUN_BIT | RX_OVERRUN_BIT, - devpriv->hpdi_iobase + BOARD_STATUS_REG); + devpriv->mmio + BOARD_STATUS_REG); /* enable interrupts */ - writel(intr_bit(RX_FULL_INTR), - devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); + writel(intr_bit(RX_FULL_INTR), devpriv->mmio + INTERRUPT_CONTROL_REG); - writel(RX_ENABLE_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); + writel(RX_ENABLE_BIT, devpriv->mmio + BOARD_CONTROL_REG); return 0; } @@ -543,20 +541,20 @@ static int gsc_hpdi_init(struct comedi_device *dev) struct hpdi_private *devpriv = dev->private; uint32_t plx_intcsr_bits; - writel(BOARD_RESET_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); + writel(BOARD_RESET_BIT, devpriv->mmio + BOARD_CONTROL_REG); udelay(10); writel(almost_empty_bits(32) | almost_full_bits(32), - devpriv->hpdi_iobase + RX_PROG_ALMOST_REG); + devpriv->mmio + RX_PROG_ALMOST_REG); writel(almost_empty_bits(32) | almost_full_bits(32), - devpriv->hpdi_iobase + TX_PROG_ALMOST_REG); + devpriv->mmio + TX_PROG_ALMOST_REG); - devpriv->tx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + + devpriv->tx_fifo_size = fifo_size(readl(devpriv->mmio + TX_FIFO_SIZE_REG)); - devpriv->rx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + + devpriv->rx_fifo_size = fifo_size(readl(devpriv->mmio + RX_FIFO_SIZE_REG)); - writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); + writel(0, devpriv->mmio + INTERRUPT_CONTROL_REG); /* enable interrupts */ plx_intcsr_bits = @@ -647,8 +645,8 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev, pci_set_master(pcidev); devpriv->plx9080_mmio = pci_ioremap_bar(pcidev, 0); - devpriv->hpdi_iobase = pci_ioremap_bar(pcidev, 2); - if (!devpriv->plx9080_mmio || !devpriv->hpdi_iobase) { + devpriv->mmio = pci_ioremap_bar(pcidev, 2); + if (!devpriv->plx9080_mmio || !devpriv->mm
[PATCH 10/26] staging: comedi: gsc_hpdi: rename handle_interrupt()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index f4cfac0..f1af16a 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -268,7 +268,7 @@ static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel) /* XXX check for buffer overrun somehow */ } -static irqreturn_t handle_interrupt(int irq, void *d) +static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) { struct comedi_device *dev = d; struct hpdi_private *devpriv = dev->private; @@ -680,7 +680,7 @@ static int hpdi_auto_attach(struct comedi_device *dev, init_plx9080(dev); /* get irq */ - if (request_irq(pcidev->irq, handle_interrupt, IRQF_SHARED, + if (request_irq(pcidev->irq, gsc_hpdi_interrupt, IRQF_SHARED, dev->board_name, dev)) { dev_warn(dev->class_dev, "unable to allocate irq %u\n", pcidev->irq); -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 12/26] staging: comedi: gsc_hpdi: rename the (*auto_attach) and (*detach) functions
From: H Hartley Sweeten For aesthetics, rename these functions so they have namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 10 +- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 400f5ec..364c91d 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -642,8 +642,8 @@ static const struct hpdi_board *hpdi_find_board(struct pci_dev *pcidev) return NULL; } -static int hpdi_auto_attach(struct comedi_device *dev, - unsigned long context_unused) +static int gsc_hpdi_auto_attach(struct comedi_device *dev, + unsigned long context_unused) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct hpdi_board *thisboard; @@ -733,7 +733,7 @@ static int hpdi_auto_attach(struct comedi_device *dev, return init_hpdi(dev); } -static void hpdi_detach(struct comedi_device *dev) +static void gsc_hpdi_detach(struct comedi_device *dev) { struct pci_dev *pcidev = comedi_to_pci_dev(dev); struct hpdi_private *devpriv = dev->private; @@ -771,8 +771,8 @@ static void hpdi_detach(struct comedi_device *dev) static struct comedi_driver gsc_hpdi_driver = { .driver_name= "gsc_hpdi", .module = THIS_MODULE, - .auto_attach= hpdi_auto_attach, - .detach = hpdi_detach, + .auto_attach= gsc_hpdi_auto_attach, + .detach = gsc_hpdi_detach, }; static int gsc_hpdi_pci_probe(struct pci_dev *dev, -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 02/26] staging: comedi: gsc_hpdi: absorb setup_subdevices()
From: H Hartley Sweeten This function is only called by the (*auto_attach). Absorb it into that function to clarify the attach and remove the need for some of the forward declarations. For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 54 +++ 1 file changed, 18 insertions(+), 36 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 28fcda7..26e5bdf 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -53,10 +53,6 @@ #include "comedi_fc.h" static void abort_dma(struct comedi_device *dev, unsigned int channel); -static int hpdi_cmd(struct comedi_device *dev, struct comedi_subdevice *s); -static int hpdi_cmd_test(struct comedi_device *dev, struct comedi_subdevice *s, -struct comedi_cmd *cmd); -static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s); static int dio_config_block_size(struct comedi_device *dev, unsigned int *data); #define TIMER_BASE 50 /* 20MHz master clock */ @@ -284,36 +280,6 @@ static void init_plx9080(struct comedi_device *dev) writel(bits, plx_iobase + PLX_DMA0_MODE_REG); } -/* Allocate and initialize the subdevice structures. - */ -static int setup_subdevices(struct comedi_device *dev) -{ - struct comedi_subdevice *s; - int ret; - - ret = comedi_alloc_subdevices(dev, 1); - if (ret) - return ret; - - s = &dev->subdevices[0]; - /* analog input subdevice */ - dev->read_subdev = s; -/* dev->write_subdev = s; */ - s->type = COMEDI_SUBD_DIO; - s->subdev_flags = - SDF_READABLE | SDF_WRITEABLE | SDF_LSAMPL | SDF_CMD_READ; - s->n_chan = 32; - s->len_chanlist = 32; - s->maxdata = 1; - s->range_table = &range_digital; - s->insn_config = dio_config_insn; - s->do_cmd = hpdi_cmd; - s->do_cmdtest = hpdi_cmd_test; - s->cancel = hpdi_cancel; - - return 0; -} - static int init_hpdi(struct comedi_device *dev) { struct hpdi_private *devpriv = dev->private; @@ -716,6 +682,7 @@ static int hpdi_auto_attach(struct comedi_device *dev, struct pci_dev *pcidev = comedi_to_pci_dev(dev); const struct hpdi_board *thisboard; struct hpdi_private *devpriv; + struct comedi_subdevice *s; int i; int retval; @@ -778,10 +745,25 @@ static int hpdi_auto_attach(struct comedi_device *dev, if (retval < 0) return retval; - retval = setup_subdevices(dev); - if (retval < 0) + retval = comedi_alloc_subdevices(dev, 1); + if (retval) return retval; + /* Digital I/O subdevice */ + s = &dev->subdevices[0]; + dev->read_subdev = s; + s->type = COMEDI_SUBD_DIO; + s->subdev_flags = SDF_READABLE | SDF_WRITEABLE | SDF_LSAMPL | + SDF_CMD_READ; + s->n_chan = 32; + s->len_chanlist = 32; + s->maxdata = 1; + s->range_table = &range_digital; + s->insn_config = dio_config_insn; + s->do_cmd = hpdi_cmd; + s->do_cmdtest = hpdi_cmd_test; + s->cancel = hpdi_cancel; + return init_hpdi(dev); } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 19/26] staging: comedi: gsc_hpdi: tidy up gsc_hpdi_drain_dma()
From: H Hartley Sweeten Refactor this function to clarify the loop that reads all the full buffers. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 60 +++ 1 file changed, 28 insertions(+), 32 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 1686c11..b5dd292 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -210,42 +210,38 @@ struct hpdi_private { static void gsc_hpdi_drain_dma(struct comedi_device *dev, unsigned int channel) { struct hpdi_private *devpriv = dev->private; - struct comedi_async *async = dev->read_subdev->async; - uint32_t next_transfer_addr; - int j; - int num_samples = 0; - void __iomem *pci_addr_reg; + struct comedi_subdevice *s = dev->read_subdev; + struct comedi_cmd *cmd = &s->async->cmd; + unsigned int idx; + unsigned int start; + unsigned int desc; + unsigned int size; + unsigned int next; if (channel) - pci_addr_reg = - devpriv->plx9080_iobase + PLX_DMA1_PCI_ADDRESS_REG; + next = readl(devpriv->plx9080_iobase + PLX_DMA1_PCI_ADDRESS_REG); else - pci_addr_reg = - devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG; - - /* loop until we have read all the full buffers */ - j = 0; - for (next_transfer_addr = readl(pci_addr_reg); -(next_transfer_addr < - le32_to_cpu(devpriv->dma_desc[devpriv->dma_desc_index]. - pci_start_addr) - || next_transfer_addr >= - le32_to_cpu(devpriv->dma_desc[devpriv->dma_desc_index]. - pci_start_addr) + devpriv->block_size) -&& j < devpriv->num_dma_descriptors; j++) { - /* transfer data from dma buffer to comedi buffer */ - num_samples = devpriv->block_size / sizeof(uint32_t); - if (async->cmd.stop_src == TRIG_COUNT) { - if (num_samples > devpriv->dio_count) - num_samples = devpriv->dio_count; - devpriv->dio_count -= num_samples; + next = readl(devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG); + + idx = devpriv->dma_desc_index; + start = le32_to_cpu(devpriv->dma_desc[idx].pci_start_addr); + /* loop until we have read all the full buffers */ + for (desc = 0; (next < start || next >= start + devpriv->block_size) && +desc < devpriv->num_dma_descriptors; desc++) { + /* transfer data from dma buffer to comedi buffer */ + size = devpriv->block_size / sizeof(uint32_t); + if (cmd->stop_src == TRIG_COUNT) { + if (size > devpriv->dio_count) + size = devpriv->dio_count; + devpriv->dio_count -= size; } - cfc_write_array_to_buffer(dev->read_subdev, - devpriv->desc_dio_buffer[devpriv-> - dma_desc_index], - num_samples * sizeof(uint32_t)); - devpriv->dma_desc_index++; - devpriv->dma_desc_index %= devpriv->num_dma_descriptors; + cfc_write_array_to_buffer(s, devpriv->desc_dio_buffer[idx], + size * sizeof(uint32_t)); + idx++; + idx %= devpriv->num_dma_descriptors; + start = le32_to_cpu(devpriv->dma_desc[idx].pci_start_addr); + + devpriv->dma_desc_index = idx; } /* XXX check for buffer overrun somehow */ } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 03/26] staging: comedi: gsc_hpdi: move the (*auto_attach) helper functions
From: H Hartley Sweeten For aesthetics, move a couple helper functions that are only called by the (*auto_attach) closer to that function. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 163 +++--- 1 file changed, 81 insertions(+), 82 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 26e5bdf..7a07c1f 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -239,76 +239,6 @@ static void disable_plx_interrupts(struct comedi_device *dev) writel(0, devpriv->plx9080_iobase + PLX_INTRCS_REG); } -/* initialize plx9080 chip */ -static void init_plx9080(struct comedi_device *dev) -{ - struct hpdi_private *devpriv = dev->private; - uint32_t bits; - void __iomem *plx_iobase = devpriv->plx9080_iobase; - -#ifdef __BIG_ENDIAN - bits = BIGEND_DMA0 | BIGEND_DMA1; -#else - bits = 0; -#endif - writel(bits, devpriv->plx9080_iobase + PLX_BIGEND_REG); - - disable_plx_interrupts(dev); - - abort_dma(dev, 0); - abort_dma(dev, 1); - - /* configure dma0 mode */ - bits = 0; - /* enable ready input */ - bits |= PLX_DMA_EN_READYIN_BIT; - /* enable dma chaining */ - bits |= PLX_EN_CHAIN_BIT; - /* enable interrupt on dma done -* (probably don't need this, since chain never finishes) */ - bits |= PLX_EN_DMA_DONE_INTR_BIT; - /* don't increment local address during transfers -* (we are transferring from a fixed fifo register) */ - bits |= PLX_LOCAL_ADDR_CONST_BIT; - /* route dma interrupt to pci bus */ - bits |= PLX_DMA_INTR_PCI_BIT; - /* enable demand mode */ - bits |= PLX_DEMAND_MODE_BIT; - /* enable local burst mode */ - bits |= PLX_DMA_LOCAL_BURST_EN_BIT; - bits |= PLX_LOCAL_BUS_32_WIDE_BITS; - writel(bits, plx_iobase + PLX_DMA0_MODE_REG); -} - -static int init_hpdi(struct comedi_device *dev) -{ - struct hpdi_private *devpriv = dev->private; - uint32_t plx_intcsr_bits; - - writel(BOARD_RESET_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); - udelay(10); - - writel(almost_empty_bits(32) | almost_full_bits(32), - devpriv->hpdi_iobase + RX_PROG_ALMOST_REG); - writel(almost_empty_bits(32) | almost_full_bits(32), - devpriv->hpdi_iobase + TX_PROG_ALMOST_REG); - - devpriv->tx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + - TX_FIFO_SIZE_REG)); - devpriv->rx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + - RX_FIFO_SIZE_REG)); - - writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); - - /* enable interrupts */ - plx_intcsr_bits = - ICS_AERR | ICS_PERR | ICS_PIE | ICS_PLIE | ICS_PAIE | ICS_LIE | - ICS_DMA0_E; - writel(plx_intcsr_bits, devpriv->plx9080_iobase + PLX_INTRCS_REG); - - return 0; -} - /* setup dma descriptors so a link completes every 'transfer_size' bytes */ static int setup_dma_descriptors(struct comedi_device *dev, unsigned int transfer_size) @@ -360,17 +290,6 @@ static int setup_dma_descriptors(struct comedi_device *dev, return transfer_size; } -static const struct hpdi_board *hpdi_find_board(struct pci_dev *pcidev) -{ - unsigned int i; - - for (i = 0; i < ARRAY_SIZE(hpdi_boards); i++) - if (pcidev->device == hpdi_boards[i].device_id && - pcidev->subsystem_device == hpdi_boards[i].subdevice_id) - return &hpdi_boards[i]; - return NULL; -} - static int dio_config_block_size(struct comedi_device *dev, unsigned int *data) { unsigned int requested_block_size; @@ -676,8 +595,88 @@ static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } +static int init_hpdi(struct comedi_device *dev) +{ + struct hpdi_private *devpriv = dev->private; + uint32_t plx_intcsr_bits; + + writel(BOARD_RESET_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); + udelay(10); + + writel(almost_empty_bits(32) | almost_full_bits(32), + devpriv->hpdi_iobase + RX_PROG_ALMOST_REG); + writel(almost_empty_bits(32) | almost_full_bits(32), + devpriv->hpdi_iobase + TX_PROG_ALMOST_REG); + + devpriv->tx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + + TX_FIFO_SIZE_REG)); + devpriv->rx_fifo_size = fifo_size(readl(devpriv->hpdi_iobase + + RX_FIFO_SIZE_REG)); + + writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); + + /* enable interrupts */ + plx_intcsr_bits = + ICS_
[PATCH 11/26] staging: comedi: gsc_hpdi: rename drain_dma_buffers()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index f1af16a..400f5ec 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -225,7 +225,7 @@ static inline void hpdi_writel(struct comedi_device *dev, uint32_t bits, devpriv->hpdi_iobase + offset); } -static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel) +static void gsc_hpdi_drain_dma(struct comedi_device *dev, unsigned int channel) { struct hpdi_private *devpriv = dev->private; struct comedi_async *async = dev->read_subdev->async; @@ -302,7 +302,7 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) devpriv->plx9080_iobase + PLX_DMA0_CS_REG); if (dma0_status & PLX_DMA_EN_BIT) - drain_dma_buffers(dev, 0); + gsc_hpdi_drain_dma(dev, 0); } spin_unlock_irqrestore(&dev->spinlock, flags); -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 22/26] staging: comedi: gsc_hpdi: tidy up the register map
From: H Hartley Sweeten For aesthetics, convert the various enums into simple defines to describe the register map for the board. Group the bit defines with the associated register define. Convert the helper functions for the register bit/shift/mask stuff into simple defines. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 198 +- 1 file changed, 82 insertions(+), 116 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 0770ad1..f95724a 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -52,115 +52,80 @@ #include "plx9080.h" #include "comedi_fc.h" -#define TIMER_BASE 50 /* 20MHz master clock */ -#define DMA_BUFFER_SIZE 0x1 -#define NUM_DMA_BUFFERS 4 -#define NUM_DMA_DESCRIPTORS 256 - -enum hpdi_registers { - FIRMWARE_REV_REG = 0x0, - BOARD_CONTROL_REG = 0x4, - BOARD_STATUS_REG = 0x8, - TX_PROG_ALMOST_REG = 0xc, - RX_PROG_ALMOST_REG = 0x10, - FEATURES_REG = 0x14, - FIFO_REG = 0x18, - TX_STATUS_COUNT_REG = 0x1c, - TX_LINE_VALID_COUNT_REG = 0x20, - TX_LINE_INVALID_COUNT_REG = 0x24, - RX_STATUS_COUNT_REG = 0x28, - RX_LINE_COUNT_REG = 0x2c, - INTERRUPT_CONTROL_REG = 0x30, - INTERRUPT_STATUS_REG = 0x34, - TX_CLOCK_DIVIDER_REG = 0x38, - TX_FIFO_SIZE_REG = 0x40, - RX_FIFO_SIZE_REG = 0x44, - TX_FIFO_WORDS_REG = 0x48, - RX_FIFO_WORDS_REG = 0x4c, - INTERRUPT_EDGE_LEVEL_REG = 0x50, - INTERRUPT_POLARITY_REG = 0x54, -}; - -/* bit definitions */ - -enum firmware_revision_bits { - FEATURES_REG_PRESENT_BIT = 0x8000, -}; - -enum board_control_bits { - BOARD_RESET_BIT = 0x1, /* wait 10usec before accessing fifos */ - TX_FIFO_RESET_BIT = 0x2, - RX_FIFO_RESET_BIT = 0x4, - TX_ENABLE_BIT = 0x10, - RX_ENABLE_BIT = 0x20, - DEMAND_DMA_DIRECTION_TX_BIT = 0x40, - /* for ch 0, ch 1 can only transmit (when present) */ - LINE_VALID_ON_STATUS_VALID_BIT = 0x80, - START_TX_BIT = 0x10, - CABLE_THROTTLE_ENABLE_BIT = 0x20, - TEST_MODE_ENABLE_BIT = 0x8000, -}; - -enum board_status_bits { - COMMAND_LINE_STATUS_MASK = 0x7f, - TX_IN_PROGRESS_BIT = 0x80, - TX_NOT_EMPTY_BIT = 0x100, - TX_NOT_ALMOST_EMPTY_BIT = 0x200, - TX_NOT_ALMOST_FULL_BIT = 0x400, - TX_NOT_FULL_BIT = 0x800, - RX_NOT_EMPTY_BIT = 0x1000, - RX_NOT_ALMOST_EMPTY_BIT = 0x2000, - RX_NOT_ALMOST_FULL_BIT = 0x4000, - RX_NOT_FULL_BIT = 0x8000, - BOARD_JUMPER0_INSTALLED_BIT = 0x1, - BOARD_JUMPER1_INSTALLED_BIT = 0x2, - TX_OVERRUN_BIT = 0x20, - RX_UNDERRUN_BIT = 0x40, - RX_OVERRUN_BIT = 0x80, -}; - -static uint32_t almost_full_bits(unsigned int num_words) -{ - /* XXX need to add or subtract one? */ - return (num_words << 16) & 0xff; -} - -static uint32_t almost_empty_bits(unsigned int num_words) -{ - return num_words & 0x; -} - -enum features_bits { - FIFO_SIZE_PRESENT_BIT = 0x1, - FIFO_WORDS_PRESENT_BIT = 0x2, - LEVEL_EDGE_INTERRUPTS_PRESENT_BIT = 0x4, - GPIO_SUPPORTED_BIT = 0x8, - PLX_DMA_CH1_SUPPORTED_BIT = 0x10, - OVERRUN_UNDERRUN_SUPPORTED_BIT = 0x20, -}; - -enum interrupt_sources { - FRAME_VALID_START_INTR = 0, - FRAME_VALID_END_INTR = 1, - TX_FIFO_EMPTY_INTR = 8, - TX_FIFO_ALMOST_EMPTY_INTR = 9, - TX_FIFO_ALMOST_FULL_INTR = 10, - TX_FIFO_FULL_INTR = 11, - RX_EMPTY_INTR = 12, - RX_ALMOST_EMPTY_INTR = 13, - RX_ALMOST_FULL_INTR = 14, - RX_FULL_INTR = 15, -}; - -static uint32_t intr_bit(int interrupt_source) -{ - return 0x1 << interrupt_source; -} - -static unsigned int fifo_size(uint32_t fifo_size_bits) -{ - return fifo_size_bits & 0xf; -} +/* + * PCI BAR2 Register map (devpriv->mmio) + */ +#define FIRMWARE_REV_REG 0x00 +#define FEATURES_REG_PRESENT_BIT (1 << 15) +#define BOARD_CONTROL_REG 0x04 +#define BOARD_RESET_BIT(1 << 0) +#define TX_FIFO_RESET_BIT (1 << 1) +#define RX_FIFO_RESET_BIT (1 << 2) +#define TX_ENABLE_BIT (1 << 4) +#define RX_ENABLE_BIT (1 << 5) +#define DEMAND_DMA_DIRECTION_TX_BIT(1 << 6) /* ch 0 only */ +#define LINE_VALID_ON_STATUS_VALID_BIT (1 << 7) +#define START_TX_BIT (1 << 8) +#define CABLE_THROTTLE_ENABLE_BIT (1 << 9) +#define TEST_MODE_ENABLE_BIT (1 << 31) +#define BOARD_STATUS_REG 0x08 +#define COMMAND_LINE_STATUS_MASK (0x7f << 0) +#define TX_IN_PROGRESS_BIT (1
[PATCH 25/26] staging: comedi: gsc_hpdi: remove pr_fmt() define
From: H Hartley Sweeten This driver no longer has any pr_{level} messages. Remove the pr_fmt(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 950516b..e66a7c9 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -40,8 +40,6 @@ * support could be added to this driver. */ -#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - #include #include #include -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 20/26] staging: comedi: gsc_hpdi: rename 'plx9080_iobase' in private data
From: H Hartley Sweeten Rename this member to fix two checkpatch.pl warnings about lines > 80 characters. Also remove the unnecessary comment. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 51 +++ 1 file changed, 25 insertions(+), 26 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index b5dd292..da9a002 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -184,8 +184,7 @@ static const struct hpdi_board hpdi_boards[] = { }; struct hpdi_private { - /* base addresses (ioremapped) */ - void __iomem *plx9080_iobase; + void __iomem *plx9080_mmio; void __iomem *hpdi_iobase; uint32_t *dio_buffer[NUM_DMA_BUFFERS]; /* dma buffers */ /* physical addresses of dma buffers */ @@ -219,9 +218,9 @@ static void gsc_hpdi_drain_dma(struct comedi_device *dev, unsigned int channel) unsigned int next; if (channel) - next = readl(devpriv->plx9080_iobase + PLX_DMA1_PCI_ADDRESS_REG); + next = readl(devpriv->plx9080_mmio + PLX_DMA1_PCI_ADDRESS_REG); else - next = readl(devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG); + next = readl(devpriv->plx9080_mmio + PLX_DMA0_PCI_ADDRESS_REG); idx = devpriv->dma_desc_index; start = le32_to_cpu(devpriv->dma_desc[idx].pci_start_addr); @@ -261,7 +260,7 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) if (!dev->attached) return IRQ_NONE; - plx_status = readl(devpriv->plx9080_iobase + PLX_INTRCS_REG); + plx_status = readl(devpriv->plx9080_mmio + PLX_INTRCS_REG); if ((plx_status & (ICS_DMA0_A | ICS_DMA1_A | ICS_LIA)) == 0) return IRQ_NONE; @@ -274,10 +273,10 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) } /* spin lock makes sure no one else changes plx dma control reg */ spin_lock_irqsave(&dev->spinlock, flags); - dma0_status = readb(devpriv->plx9080_iobase + PLX_DMA0_CS_REG); + dma0_status = readb(devpriv->plx9080_mmio + PLX_DMA0_CS_REG); if (plx_status & ICS_DMA0_A) { /* dma chan 0 interrupt */ writeb((dma0_status & PLX_DMA_EN_BIT) | PLX_CLEAR_DMA_INTR_BIT, - devpriv->plx9080_iobase + PLX_DMA0_CS_REG); + devpriv->plx9080_mmio + PLX_DMA0_CS_REG); if (dma0_status & PLX_DMA_EN_BIT) gsc_hpdi_drain_dma(dev, 0); @@ -286,17 +285,17 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) /* spin lock makes sure no one else changes plx dma control reg */ spin_lock_irqsave(&dev->spinlock, flags); - dma1_status = readb(devpriv->plx9080_iobase + PLX_DMA1_CS_REG); + dma1_status = readb(devpriv->plx9080_mmio + PLX_DMA1_CS_REG); if (plx_status & ICS_DMA1_A) { /* XXX *//* dma chan 1 interrupt */ writeb((dma1_status & PLX_DMA_EN_BIT) | PLX_CLEAR_DMA_INTR_BIT, - devpriv->plx9080_iobase + PLX_DMA1_CS_REG); + devpriv->plx9080_mmio + PLX_DMA1_CS_REG); } spin_unlock_irqrestore(&dev->spinlock, flags); /* clear possible plx9080 interrupt sources */ if (plx_status & ICS_LDIA) {/* clear local doorbell interrupt */ - plx_bits = readl(devpriv->plx9080_iobase + PLX_DBR_OUT_REG); - writel(plx_bits, devpriv->plx9080_iobase + PLX_DBR_OUT_REG); + plx_bits = readl(devpriv->plx9080_mmio + PLX_DBR_OUT_REG); + writel(plx_bits, devpriv->plx9080_mmio + PLX_DBR_OUT_REG); } if (hpdi_board_status & RX_OVERRUN_BIT) { @@ -325,7 +324,7 @@ static void gsc_hpdi_abort_dma(struct comedi_device *dev, unsigned int channel) /* spinlock for plx dma control/status reg */ spin_lock_irqsave(&dev->spinlock, flags); - plx9080_abort_dma(devpriv->plx9080_iobase, channel); + plx9080_abort_dma(devpriv->plx9080_mmio, channel); spin_unlock_irqrestore(&dev->spinlock, flags); } @@ -367,19 +366,19 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, * occasionally cause problems with transfer of first dma * block. Initializing them to zero seems to fix the problem. */ - writel(0, devpriv->plx9080_iobase + PLX_DMA0_TRANSFER_SIZE_REG); - writel(0, devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG); - writel(0, devpriv->plx9080_iobase + PLX_DMA0_LOCAL_ADDRESS_REG); + writel(0, devpriv->plx9080_mmio + PLX_DMA0_TRANSFER_SIZE_REG); + writel(0, devpriv->plx9080_mmio + PLX_DMA0_PCI_ADDRESS_REG); + writel(0, devpriv->plx9080_mmio + PLX_DMA0_LOCAL_ADDRESS_REG); /* give location of first dma descriptor */ bits = devpriv->dma_desc_p
[PATCH 26/26] staging: comedi: gsc_hpdi: tidy up multi-line comment
From: H Hartley Sweeten Tidy up the comment to follow the CodingStyle. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 40 +++ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index e66a7c9..08d7655 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -1,24 +1,24 @@ /* -comedi/drivers/gsc_hpdi.c -This is a driver for the General Standards Corporation High -Speed Parallel Digital Interface rs485 boards. - -Author: Frank Mori Hess -Copyright (C) 2003 Coherent Imaging Systems - -COMEDI - Linux Control and Measurement Device Interface -Copyright (C) 1997-8 David A. Schleef - -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. -*/ + * gsc_hpdi.c + * Comedi driver the General Standards Corporation + * High Speed Parallel Digital Interface rs485 boards. + * + * Author: Frank Mori Hess + * Copyright (C) 2003 Coherent Imaging Systems + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 1997-8 David A. Schleef + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ /* * Driver: gsc_hpdi -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 13/26] staging: comedi: gsc_hpdi: rename hpdi_find_board()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 364c91d..b098981 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -631,7 +631,7 @@ static void init_plx9080(struct comedi_device *dev) writel(bits, plx_iobase + PLX_DMA0_MODE_REG); } -static const struct hpdi_board *hpdi_find_board(struct pci_dev *pcidev) +static const struct hpdi_board *gsc_hpdi_find_board(struct pci_dev *pcidev) { unsigned int i; @@ -652,7 +652,7 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev, int i; int retval; - thisboard = hpdi_find_board(pcidev); + thisboard = gsc_hpdi_find_board(pcidev); if (!thisboard) { dev_err(dev->class_dev, "gsc_hpdi: pci %s not supported\n", pci_name(pcidev)); -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 06/26] staging: comedi: gsc_hpdi: tidy up hpdi_cmd()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver and move it so that it is not in the middle of the interrupt support code. Absorb the di_cmd() helper and tidy up the function a bit. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 118 +++--- 1 file changed, 58 insertions(+), 60 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index b68bc917..c7c20f8 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -308,65 +308,6 @@ static inline void hpdi_writel(struct comedi_device *dev, uint32_t bits, devpriv->hpdi_iobase + offset); } -static int di_cmd(struct comedi_device *dev, struct comedi_subdevice *s) -{ - struct hpdi_private *devpriv = dev->private; - uint32_t bits; - unsigned long flags; - struct comedi_async *async = s->async; - struct comedi_cmd *cmd = &async->cmd; - - hpdi_writel(dev, RX_FIFO_RESET_BIT, BOARD_CONTROL_REG); - - abort_dma(dev, 0); - - devpriv->dma_desc_index = 0; - - /* These register are supposedly unused during chained dma, -* but I have found that left over values from last operation -* occasionally cause problems with transfer of first dma -* block. Initializing them to zero seems to fix the problem. */ - writel(0, devpriv->plx9080_iobase + PLX_DMA0_TRANSFER_SIZE_REG); - writel(0, devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG); - writel(0, devpriv->plx9080_iobase + PLX_DMA0_LOCAL_ADDRESS_REG); - /* give location of first dma descriptor */ - bits = - devpriv->dma_desc_phys_addr | PLX_DESC_IN_PCI_BIT | - PLX_INTR_TERM_COUNT | PLX_XFER_LOCAL_TO_PCI; - writel(bits, devpriv->plx9080_iobase + PLX_DMA0_DESCRIPTOR_REG); - - /* spinlock for plx dma control/status reg */ - spin_lock_irqsave(&dev->spinlock, flags); - /* enable dma transfer */ - writeb(PLX_DMA_EN_BIT | PLX_DMA_START_BIT | PLX_CLEAR_DMA_INTR_BIT, - devpriv->plx9080_iobase + PLX_DMA0_CS_REG); - spin_unlock_irqrestore(&dev->spinlock, flags); - - if (cmd->stop_src == TRIG_COUNT) - devpriv->dio_count = cmd->stop_arg; - else - devpriv->dio_count = 1; - - /* clear over/under run status flags */ - writel(RX_UNDERRUN_BIT | RX_OVERRUN_BIT, - devpriv->hpdi_iobase + BOARD_STATUS_REG); - /* enable interrupts */ - writel(intr_bit(RX_FULL_INTR), - devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); - - hpdi_writel(dev, RX_ENABLE_BIT, BOARD_CONTROL_REG); - - return 0; -} - -static int hpdi_cmd(struct comedi_device *dev, struct comedi_subdevice *s) -{ - if (s->io_bits) - return -EINVAL; - else - return di_cmd(dev, s); -} - static void drain_dma_buffers(struct comedi_device *dev, unsigned int channel) { struct hpdi_private *devpriv = dev->private; @@ -507,6 +448,63 @@ static int hpdi_cancel(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } +static int gsc_hpdi_cmd(struct comedi_device *dev, + struct comedi_subdevice *s) +{ + struct hpdi_private *devpriv = dev->private; + struct comedi_async *async = s->async; + struct comedi_cmd *cmd = &async->cmd; + unsigned long flags; + uint32_t bits; + + if (s->io_bits) + return -EINVAL; + + hpdi_writel(dev, RX_FIFO_RESET_BIT, BOARD_CONTROL_REG); + + abort_dma(dev, 0); + + devpriv->dma_desc_index = 0; + + /* +* These register are supposedly unused during chained dma, +* but I have found that left over values from last operation +* occasionally cause problems with transfer of first dma +* block. Initializing them to zero seems to fix the problem. +*/ + writel(0, devpriv->plx9080_iobase + PLX_DMA0_TRANSFER_SIZE_REG); + writel(0, devpriv->plx9080_iobase + PLX_DMA0_PCI_ADDRESS_REG); + writel(0, devpriv->plx9080_iobase + PLX_DMA0_LOCAL_ADDRESS_REG); + + /* give location of first dma descriptor */ + bits = devpriv->dma_desc_phys_addr | PLX_DESC_IN_PCI_BIT | + PLX_INTR_TERM_COUNT | PLX_XFER_LOCAL_TO_PCI; + writel(bits, devpriv->plx9080_iobase + PLX_DMA0_DESCRIPTOR_REG); + + /* enable dma transfer */ + spin_lock_irqsave(&dev->spinlock, flags); + writeb(PLX_DMA_EN_BIT | PLX_DMA_START_BIT | PLX_CLEAR_DMA_INTR_BIT, + devpriv->plx9080_iobase + PLX_DMA0_CS_REG); + spin_unlock_irqrestore(&dev->spinlock, flags); + + if (cmd->stop_src == TRIG_COUNT) + devpriv->dio_count = cmd->stop_arg; + else + devpriv->dio_count = 1;
[PATCH 09/26] staging: comedi: gsc_hpdi: rename abort_dma()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Also, remove the unnecessary forward declaration. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 12 +--- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 1fc65b1..f4cfac0 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -52,8 +52,6 @@ #include "plx9080.h" #include "comedi_fc.h" -static void abort_dma(struct comedi_device *dev, unsigned int channel); - #define TIMER_BASE 50 /* 20MHz master clock */ #define DMA_BUFFER_SIZE 0x1 #define NUM_DMA_BUFFERS 4 @@ -341,7 +339,7 @@ static irqreturn_t handle_interrupt(int irq, void *d) return IRQ_HANDLED; } -static void abort_dma(struct comedi_device *dev, unsigned int channel) +static void gsc_hpdi_abort_dma(struct comedi_device *dev, unsigned int channel) { struct hpdi_private *devpriv = dev->private; unsigned long flags; @@ -363,7 +361,7 @@ static int gsc_hpdi_cancel(struct comedi_device *dev, writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); - abort_dma(dev, 0); + gsc_hpdi_abort_dma(dev, 0); return 0; } @@ -382,7 +380,7 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, hpdi_writel(dev, RX_FIFO_RESET_BIT, BOARD_CONTROL_REG); - abort_dma(dev, 0); + gsc_hpdi_abort_dma(dev, 0); devpriv->dma_desc_index = 0; @@ -608,8 +606,8 @@ static void init_plx9080(struct comedi_device *dev) disable_plx_interrupts(dev); - abort_dma(dev, 0); - abort_dma(dev, 1); + gsc_hpdi_abort_dma(dev, 0); + gsc_hpdi_abort_dma(dev, 1); /* configure dma0 mode */ bits = 0; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 00/26] staging: comedi: gsc_hpdi: clean up driver
This is the big clean up series for the coemdi gsc_hpdi driver. H Hartley Sweeten (26): staging: comedi: gsc_hpdi: move the (*auto_attach) and (*detach) functions staging: comedi: gsc_hpdi: absorb setup_subdevices() staging: comedi: gsc_hpdi: move the (*auto_attach) helper functions staging: comedi: gsc_hpdi: tidy up dio_config_insn() staging: comedi: gsc_hpdi: tidy up setup_dma_descriptors() staging: comedi: gsc_hpdi: tidy up hpdi_cmd() staging: comedi: gsc_hpdi: tidy up hpdi_cmd_test() staging: comedi: gsc_hpdi: rename hpdi_cancel() staging: comedi: gsc_hpdi: rename abort_dma() staging: comedi: gsc_hpdi: rename handle_interrupt() staging: comedi: gsc_hpdi: rename drain_dma_buffers() staging: comedi: gsc_hpdi: rename the (*auto_attach) and (*detach) functions staging: comedi: gsc_hpdi: rename hpdi_find_board() staging: comedi: gsc_hpdi: rename init_plx9080() staging: comedi: gsc_hpdi: rename init_hpdi() staging: comedi: gsc_hpdi: remove disable_plx_interrupts() staging: comedi: gsc_hpdi: remove hpdi_writel() staging: comedi: gsc_hpdi: remove 'volatile' from the private data members staging: comedi: gsc_hpdi: tidy up gsc_hpdi_drain_dma() staging: comedi: gsc_hpdi: rename 'plx9080_iobase' in private data staging: comedi: gsc_hpdi: rename 'hpdi_iobase' in private data staging: comedi: gsc_hpdi: tidy up the register map staging: comedi: gsc_hpdi: tidy up the boardinfo staging: comedi: gsc_hpdi: convert comedi_error() messages to dev_err() staging: comedi: gsc_hpdi: remove pr_fmt() define staging: comedi: gsc_hpdi: tidy up multi-line comment drivers/staging/comedi/drivers/gsc_hpdi.c | 1097 + 1 file changed, 491 insertions(+), 606 deletions(-) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 17/26] staging: comedi: gsc_hpdi: remove hpdi_writel()
From: H Hartley Sweeten This helper function is used to OR bits with a software copy of a register value then writel() the new value to the register. The software copies are never updated in the driver so they are always 0 due to the kzalloc. Remove the unnecessary 'bits' from the private data and replace the hpdi_writel() calls with writel(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 18 +++--- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 3762510..aaf6283 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -203,21 +203,10 @@ struct hpdi_private { unsigned int tx_fifo_size; unsigned int rx_fifo_size; volatile unsigned long dio_count; - /* software copies of values written to hpdi registers */ - volatile uint32_t bits[24]; /* number of bytes at which to generate COMEDI_CB_BLOCK events */ volatile unsigned int block_size; }; -static inline void hpdi_writel(struct comedi_device *dev, uint32_t bits, - unsigned int offset) -{ - struct hpdi_private *devpriv = dev->private; - - writel(bits | devpriv->bits[offset / sizeof(uint32_t)], - devpriv->hpdi_iobase + offset); -} - static void gsc_hpdi_drain_dma(struct comedi_device *dev, unsigned int channel) { struct hpdi_private *devpriv = dev->private; @@ -350,8 +339,7 @@ static int gsc_hpdi_cancel(struct comedi_device *dev, { struct hpdi_private *devpriv = dev->private; - hpdi_writel(dev, 0, BOARD_CONTROL_REG); - + writel(0, devpriv->hpdi_iobase + BOARD_CONTROL_REG); writel(0, devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -371,7 +359,7 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, if (s->io_bits) return -EINVAL; - hpdi_writel(dev, RX_FIFO_RESET_BIT, BOARD_CONTROL_REG); + writel(RX_FIFO_RESET_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); gsc_hpdi_abort_dma(dev, 0); @@ -411,7 +399,7 @@ static int gsc_hpdi_cmd(struct comedi_device *dev, writel(intr_bit(RX_FULL_INTR), devpriv->hpdi_iobase + INTERRUPT_CONTROL_REG); - hpdi_writel(dev, RX_ENABLE_BIT, BOARD_CONTROL_REG); + writel(RX_ENABLE_BIT, devpriv->hpdi_iobase + BOARD_CONTROL_REG); return 0; } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 23/26] staging: comedi: gsc_hpdi: tidy up the boardinfo
From: H Hartley Sweeten Remove the unnecessary comments in the boardinfo definition and tidy up the declaration. FWIW, I'm not sure this boardinfo is really needed... Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 18 +- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index f95724a..2db02b4 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -128,22 +128,22 @@ #define NUM_DMA_DESCRIPTORS256 struct hpdi_board { - const char *name; /* board name */ - int device_id; /* pci device id */ - int subdevice_id; /* pci subdevice id */ + const char *name; + int device_id; + int subdevice_id; }; static const struct hpdi_board hpdi_boards[] = { { -.name = "pci-hpdi32", -.device_id = PCI_DEVICE_ID_PLX_9080, -.subdevice_id = 0x2400, + .name = "pci-hpdi32", + .device_id = PCI_DEVICE_ID_PLX_9080, + .subdevice_id = 0x2400, }, #if 0 { -.name = "pxi-hpdi32", -.device_id = 0x9656, -.subdevice_id = 0x2705, + .name = "pxi-hpdi32", + .device_id = 0x9656, + .subdevice_id = 0x2705, }, #endif }; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 24/26] staging: comedi: gsc_hpdi: convert comedi_error() messages to dev_err()
From: H Hartley Sweeten For aesthetics, convert the comedi_error() messages to dev_err(). Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 2db02b4..950516b 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -263,12 +263,12 @@ static irqreturn_t gsc_hpdi_interrupt(int irq, void *d) } if (hpdi_board_status & RX_OVERRUN_BIT) { - comedi_error(dev, "rx fifo overrun"); + dev_err(dev->class_dev, "rx fifo overrun\n"); async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; } if (hpdi_board_status & RX_UNDERRUN_BIT) { - comedi_error(dev, "rx fifo underrun"); + dev_err(dev->class_dev, "rx fifo underrun\n"); async->events |= COMEDI_CB_EOA | COMEDI_CB_ERROR; } -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 14/26] staging: comedi: gsc_hpdi: rename init_plx9080()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index b098981..177d782 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -591,7 +591,7 @@ static int init_hpdi(struct comedi_device *dev) return 0; } -static void init_plx9080(struct comedi_device *dev) +static void gsc_hpdi_init_plx9080(struct comedi_device *dev) { struct hpdi_private *devpriv = dev->private; uint32_t bits; @@ -677,7 +677,7 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev, return -ENOMEM; } - init_plx9080(dev); + gsc_hpdi_init_plx9080(dev); /* get irq */ if (request_irq(pcidev->irq, gsc_hpdi_interrupt, IRQF_SHARED, -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 15/26] staging: comedi: gsc_hpdi: rename init_hpdi()
From: H Hartley Sweeten For aesthetics, rename this function so it has namespace associated with the driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/gsc_hpdi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/staging/comedi/drivers/gsc_hpdi.c b/drivers/staging/comedi/drivers/gsc_hpdi.c index 177d782..d9b1491 100644 --- a/drivers/staging/comedi/drivers/gsc_hpdi.c +++ b/drivers/staging/comedi/drivers/gsc_hpdi.c @@ -562,7 +562,7 @@ static int gsc_hpdi_dio_insn_config(struct comedi_device *dev, return insn->n; } -static int init_hpdi(struct comedi_device *dev) +static int gsc_hpdi_init(struct comedi_device *dev) { struct hpdi_private *devpriv = dev->private; uint32_t plx_intcsr_bits; @@ -730,7 +730,7 @@ static int gsc_hpdi_auto_attach(struct comedi_device *dev, s->do_cmdtest = gsc_hpdi_cmd_test; s->cancel = gsc_hpdi_cancel; - return init_hpdi(dev); + return gsc_hpdi_init(dev); } static void gsc_hpdi_detach(struct comedi_device *dev) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 4/7] staging: comedi: rti802: tidy up the subdevice init
From: H Hartley Sweeten For aesthetics, add some whitespace to the subdevice init. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 19 +-- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index d20eb62..9655657 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -109,22 +109,21 @@ static int rti802_attach(struct comedi_device *dev, struct comedi_devconfig *it) if (ret) return ret; + /* Analog Output subdevice */ s = &dev->subdevices[0]; - /* ao subdevice */ - s->type = COMEDI_SUBD_AO; - s->subdev_flags = SDF_WRITABLE; - s->maxdata = 0xfff; - s->n_chan = 8; - s->insn_read = rti802_ao_insn_read; - s->insn_write = rti802_ao_insn_write; + s->type = COMEDI_SUBD_AO; + s->subdev_flags = SDF_WRITABLE; + s->maxdata = 0xfff; + s->n_chan = 8; + s->insn_read= rti802_ao_insn_read; + s->insn_write = rti802_ao_insn_write; s->range_table_list = devpriv->range_type_list; for (i = 0; i < 8; i++) { devpriv->dac_coding[i] = (it->options[3 + 2 * i]) - ? (dac_straight) - : (dac_2comp); + ? (dac_straight) : (dac_2comp); devpriv->range_type_list[i] = (it->options[2 + 2 * i]) - ? &range_unipolar10 : &range_bipolar10; + ? &range_unipolar10 : &range_bipolar10; } return 0; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 1/7] staging: comedi: rti802: remove RTI802_SIZE define
From: H Hartley Sweeten This define is only used in the attach to specify the I/O region size passed to comedi_request_region(). Remove the define and just open code the value. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index a3fa2a4..c5c37a2 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -35,8 +35,6 @@ Configuration Options: #include #include "../comedidev.h" -#define RTI802_SIZE 4 - #define RTI802_SELECT 0 #define RTI802_DATALOW 1 #define RTI802_DATAHIGH 2 @@ -88,7 +86,7 @@ static int rti802_attach(struct comedi_device *dev, struct comedi_devconfig *it) int i; int ret; - ret = comedi_request_region(dev, it->options[0], RTI802_SIZE); + ret = comedi_request_region(dev, it->options[0], 0x04); if (ret) return ret; -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 0/7] staging: comedi: rti802: clean up driver
Clean up this comedi driver. H Hartley Sweeten (7): staging: comedi: rti802: remove RTI802_SIZE define staging: comedi: rti802: tidy up rti802_ao_insn_read() staging: comedi: rti802: tidy up rti802_ao_insn_write() staging: comedi: rti802: tidy up the subdevice init staging: comedi: rti802: tidy up the register map defines staging: comedi: rti802: tidy up the multi-line comments staging: comedi: rti802: update the MODULE_DESCRIPTION drivers/staging/comedi/drivers/rti802.c | 127 +--- 1 file changed, 68 insertions(+), 59 deletions(-) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 5/7] staging: comedi: rti802: tidy up the register map defines
From: H Hartley Sweeten For aesthetics, add some whitespace to the register map defines and convert the offsets to hex. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 9 ++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index 9655657..6627196 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -35,9 +35,12 @@ Configuration Options: #include #include "../comedidev.h" -#define RTI802_SELECT 0 -#define RTI802_DATALOW 1 -#define RTI802_DATAHIGH 2 +/* + * Register I/O map + */ +#define RTI802_SELECT 0x00 +#define RTI802_DATALOW 0x01 +#define RTI802_DATAHIGH0x02 struct rti802_private { enum { -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 6/7] staging: comedi: rti802: tidy up the multi-line comments
From: H Hartley Sweeten Tidy up the milti-line comments so they follow the CodingStyle. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 58 - 1 file changed, 28 insertions(+), 30 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index 6627196..f276109 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -1,36 +1,34 @@ /* - comedi/drivers/rti802.c - Hardware driver for Analog Devices RTI-802 board - - COMEDI - Linux Control and Measurement Device Interface - Copyright (C) 1999 Anders Blomdell - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + * rti802.c + * Comedi driver for Analog Devices RTI-802 board + * + * COMEDI - Linux Control and Measurement Device Interface + * Copyright (C) 1999 Anders Blomdell + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ + /* -Driver: rti802 -Description: Analog Devices RTI-802 -Author: Anders Blomdell -Devices: [Analog Devices] RTI-802 (rti802) -Status: works - -Configuration Options: -[0] - i/o base -[1] - unused -[2] - dac#0 0=two's comp, 1=straight -[3] - dac#0 0=bipolar, 1=unipolar -[4] - dac#1 ... -... -[17] - dac#7 ... -*/ + * Driver: rti802 + * Description: Analog Devices RTI-802 + * Author: Anders Blomdell + * Devices: (Analog Devices) RTI-802 [rti802] + * Status: works + * + * Configuration Options: + * [0] - i/o base + * [1] - unused + * [2,4,6,8,10,12,14,16] - dac#[0-7] 0=two's comp, 1=straight + * [3,5,7,9,11,13,15,17] - dac#[0-7] 0=bipolar, 1=unipolar + */ #include #include "../comedidev.h" -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 3/7] staging: comedi: rti802: tidy up rti802_ao_insn_write()
From: H Hartley Sweeten Use comedi_offset_munge() to handle munging the offset binary to two's complement. Tidy up the function a bit. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 27 ++- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index c1f4b3b..d20eb62 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -64,21 +64,30 @@ static int rti802_ao_insn_read(struct comedi_device *dev, static int rti802_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct rti802_private *devpriv = dev->private; - int i, d; - int chan = CR_CHAN(insn->chanspec); + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int val; + int i; + + outb(chan, dev->iobase + RTI802_SELECT); for (i = 0; i < insn->n; i++) { - d = devpriv->ao_readback[chan] = data[i]; + val = data[i]; + + devpriv->ao_readback[chan] = val; + + /* munge offset binary to two's complement if needed */ if (devpriv->dac_coding[chan] == dac_2comp) - d ^= 0x800; - outb(chan, dev->iobase + RTI802_SELECT); - outb(d & 0xff, dev->iobase + RTI802_DATALOW); - outb(d >> 8, dev->iobase + RTI802_DATAHIGH); + val = comedi_offset_munge(s, val); + + outb(val & 0xff, dev->iobase + RTI802_DATALOW); + outb((val >> 8) & 0xff, dev->iobase + RTI802_DATAHIGH); } - return i; + + return insn->n; } static int rti802_attach(struct comedi_device *dev, struct comedi_devconfig *it) -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 7/7] staging: comedi: rti802: update the MODULE_DESCRIPTION
From: H Hartley Sweeten Change the generic MODULE_DESCRIPTION text to something more specific for this driver. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index f276109..605a31d 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -139,5 +139,5 @@ static struct comedi_driver rti802_driver = { module_comedi_driver(rti802_driver); MODULE_AUTHOR("Comedi http://www.comedi.org";); -MODULE_DESCRIPTION("Comedi low-level driver"); +MODULE_DESCRIPTION("Comedi driver for Analog Devices RTI-802 board"); MODULE_LICENSE("GPL"); -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 2/7] staging: comedi: rti802: tidy up rti802_ao_insn_read()
From: H Hartley Sweeten To clarify the function a bit, add a local variable for the 'chan' that is being read and change the final return to 'insn->n'. Signed-off-by: H Hartley Sweeten Cc: Ian Abbott Cc: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/rti802.c | 8 +--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/staging/comedi/drivers/rti802.c b/drivers/staging/comedi/drivers/rti802.c index c5c37a2..c1f4b3b 100644 --- a/drivers/staging/comedi/drivers/rti802.c +++ b/drivers/staging/comedi/drivers/rti802.c @@ -49,15 +49,17 @@ struct rti802_private { static int rti802_ao_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct rti802_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); int i; for (i = 0; i < insn->n; i++) - data[i] = devpriv->ao_readback[CR_CHAN(insn->chanspec)]; + data[i] = devpriv->ao_readback[chan]; - return i; + return insn->n; } static int rti802_ao_insn_write(struct comedi_device *dev, -- 1.8.5.2 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
[PATCH 3/3] Staging: lustre: fld: moved EXPORT_SYMBOL() for a fix.
I moved EXPORT_SYMBOL(fld_client_proc_fini); for a EXPORT_SYMBOL should be immediately below its function warning fix. Signed-off-by: Gary Alan Rookard --- Correct patch, first two breaks build. On branch staging-next drivers/staging/lustre/lustre/fld/fld_request.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c index 0d2a9ab..39e5501 100644 --- a/drivers/staging/lustre/lustre/fld/fld_request.c +++ b/drivers/staging/lustre/lustre/fld/fld_request.c @@ -325,9 +325,8 @@ void fld_client_proc_fini(struct lu_client_fld *fld) { return; } -EXPORT_SYMBOL(fld_client_proc_fini); #endif - +EXPORT_SYMBOL(fld_client_proc_fini); static inline int hash_is_sane(int hash) { return hash >= 0 && hash < ARRAY_SIZE(fld_hash); -- 1.9.0 ___ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel