[PATCH v2 0/4] Staging: rts5208: Use standard debug features

2014-07-07 Thread Fabio Falzoi
Use standard debug features instead of relying on the custom
configuration option CONFIG_RTS5208_DEBUG and a series of home grown
macros.

Changes in v2:
* defined rtsx_hex_dump macro to produce output only if DEBUG is defined

Fabio Falzoi (4):
  Staging: rts5208: Replace custom macro with pr_debug
  Staging: rts5208: Replace custom macro with print_hex_dump_bytes
  Staging: rts5208: Remove CONFIG_RTS5208_DEBUG option
  Staging: rts5208: Fix a format specifier for dev_err

 drivers/staging/rts5208/Kconfig  |   7 --
 drivers/staging/rts5208/debug.h  |  43 ---
 drivers/staging/rts5208/ms.c | 144 
 drivers/staging/rts5208/rtsx.c   |   8 +-
 drivers/staging/rts5208/rtsx.h   |   1 -
 drivers/staging/rts5208/rtsx_card.c  |  72 ++--
 drivers/staging/rts5208/rtsx_card.h  |   1 -
 drivers/staging/rts5208/rtsx_chip.c  | 134 +++---
 drivers/staging/rts5208/rtsx_scsi.c  |  45 
 drivers/staging/rts5208/rtsx_transport.c |  45 
 drivers/staging/rts5208/sd.c | 186 +++
 drivers/staging/rts5208/spi.c|   8 +-
 drivers/staging/rts5208/trace.h  |  14 +--
 drivers/staging/rts5208/xd.c | 121 ++--
 14 files changed, 393 insertions(+), 436 deletions(-)
 delete mode 100644 drivers/staging/rts5208/debug.h

-- 
2.0.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 2/4] Staging: rts5208: Replace custom macro with print_hex_dump_bytes

2014-07-07 Thread Fabio Falzoi
Use print_hex_dump_bytes to have memory properly dumped only when
DEBUG is defined.

Signed-off-by: Fabio Falzoi 
---
 drivers/staging/rts5208/ms.c|  4 ++--
 drivers/staging/rts5208/rtsx_chip.c |  4 ++--
 drivers/staging/rts5208/rtsx_scsi.c |  9 -
 drivers/staging/rts5208/sd.c|  6 +++---
 drivers/staging/rts5208/trace.h | 10 +-
 5 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c
index 2476d22..0a33043 100644
--- a/drivers/staging/rts5208/ms.c
+++ b/drivers/staging/rts5208/ms.c
@@ -307,7 +307,7 @@ static int ms_read_bytes(struct rtsx_chip *chip,
 
if ((tpc == PRO_READ_SHORT_DATA) && (data_len == 8)) {
pr_debug("Read format progress:\n");
-   RTSX_DUMP(ptr, cnt);
+   rtsx_hex_dump(ptr, cnt);
}
 
return STATUS_SUCCESS;
@@ -1910,7 +1910,7 @@ RE_SEARCH:
ptr = rtsx_get_cmd_data(chip);
 
pr_debug("Boot block data:\n");
-   RTSX_DUMP(ptr, 16);
+   rtsx_hex_dump(ptr, 16);
 
/* Block ID error
 * HEADER_ID0, HEADER_ID1
diff --git a/drivers/staging/rts5208/rtsx_chip.c 
b/drivers/staging/rts5208/rtsx_chip.c
index 8f447ef..761e83c 100644
--- a/drivers/staging/rts5208/rtsx_chip.c
+++ b/drivers/staging/rts5208/rtsx_chip.c
@@ -1299,8 +1299,8 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, 
u16 addr, u8 *buf,
}
}
 
-   RTSX_DUMP(mask, dw_len * 4);
-   RTSX_DUMP(data, dw_len * 4);
+   rtsx_hex_dump(mask, dw_len * 4);
+   rtsx_hex_dump(data, dw_len * 4);
 
for (i = 0; i < dw_len; i++) {
retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
diff --git a/drivers/staging/rts5208/rtsx_scsi.c 
b/drivers/staging/rts5208/rtsx_scsi.c
index fd3c2e7..8269a02 100644
--- a/drivers/staging/rts5208/rtsx_scsi.c
+++ b/drivers/staging/rts5208/rtsx_scsi.c
@@ -40,7 +40,8 @@
 void scsi_show_command(struct scsi_cmnd *srb)
 {
char *what = NULL;
-   int i, unknown_cmd = 0;
+   int unknown_cmd = 0;
+   size_t len;
 
switch (srb->cmnd[0]) {
case TEST_UNIT_READY:
@@ -319,10 +320,8 @@ void scsi_show_command(struct scsi_cmnd *srb)
pr_debug("Command %s (%d bytes)\n", what, srb->cmd_len);
 
if (unknown_cmd) {
-   pr_debug("");
-   for (i = 0; i < srb->cmd_len && i < 16; i++)
-   pr_debug(" %02x", srb->cmnd[i]);
-   pr_debug("\n");
+   len = min_t(size_t, srb->cmd_len, 16);
+   rtsx_hex_dump(srb->cmnd, len);
}
 }
 
diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c
index 96acd39..2f50f9c 100644
--- a/drivers/staging/rts5208/sd.c
+++ b/drivers/staging/rts5208/sd.c
@@ -426,7 +426,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char 
check_wp)
memcpy(sd_card->raw_csd, rsp + 1, 15);
 
pr_debug("CSD Response:\n");
-   RTSX_DUMP(sd_card->raw_csd, 16);
+   rtsx_hex_dump(sd_card->raw_csd, 16);
 
csd_ver = (rsp[1] & 0xc0) >> 6;
pr_debug("csd_ver = %d\n", csd_ver);
@@ -1059,7 +1059,7 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, 
u8 mode,
TRACE_RET(chip, STATUS_FAIL);
}
 
-   RTSX_DUMP(buf, 64);
+   rtsx_hex_dump(buf, 64);
 
if (func_group == NO_ARGUMENT) {
sd_card->func_group1_mask = buf[0x0D];
@@ -2107,7 +2107,7 @@ static int sd_check_wp_state(struct rtsx_chip *chip)
}
 
pr_debug("ACMD13:\n");
-   RTSX_DUMP(buf, 64);
+   rtsx_hex_dump(buf, 64);
 
sd_card_type = ((u16)buf[2] << 8) | buf[3];
pr_debug("sd_card_type = 0x%04x\n", sd_card_type);
diff --git a/drivers/staging/rts5208/trace.h b/drivers/staging/rts5208/trace.h
index 7fcb459..8386a20 100644
--- a/drivers/staging/rts5208/trace.h
+++ b/drivers/staging/rts5208/trace.h
@@ -82,12 +82,12 @@ static inline char *filename(char *path)
 #define TRACE_GOTO(chip, label)goto label
 #endif
 
-#ifdef CONFIG_RTS5208_DEBUG
-#define RTSX_DUMP(buf, buf_len)\
-   print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": ", \
-  DUMP_PREFIX_NONE, 16, 1, (buf), (buf_len), false)
+#ifdef DEBUG
+#define rtsx_hex_dump(buf, len)\
+   print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, buf, len)
 #else
-#define RTSX_DUMP(buf, buf_len)
+#define rtsx_hex_dump(buf, len)\
+   do {;}while(0)
 #endif
 
 #endif  /* __REALTEK_RTSX_TRACE_H */
-- 
2.0.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 4/4] Staging: rts5208: Fix a format specifier for dev_err

2014-07-07 Thread Fabio Falzoi
Fix an incorrect use of the %d format specifier in dev_err that caused a
warning.

Signed-off-by: Fabio Falzoi 
---
 drivers/staging/rts5208/rtsx.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rts5208/rtsx.c b/drivers/staging/rts5208/rtsx.c
index 4f5f7a3..9aae7ac 100644
--- a/drivers/staging/rts5208/rtsx.c
+++ b/drivers/staging/rts5208/rtsx.c
@@ -463,14 +463,14 @@ static int rtsx_control_thread(void *__dev)
 * the maximum known LUN
 */
else if (chip->srb->device->id) {
-   dev_err(&dev->pci->dev, "Bad target number (%d:%d)\n",
+   dev_err(&dev->pci->dev, "Bad target number (%d:%llu)\n",
chip->srb->device->id,
chip->srb->device->lun);
chip->srb->result = DID_BAD_TARGET << 16;
}
 
else if (chip->srb->device->lun > chip->max_lun) {
-   dev_err(&dev->pci->dev, "Bad LUN (%d:%d)\n",
+   dev_err(&dev->pci->dev, "Bad LUN (%d:%llu)\n",
chip->srb->device->id,
chip->srb->device->lun);
chip->srb->result = DID_BAD_TARGET << 16;
-- 
2.0.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 3/4] Staging: rts5208: Remove CONFIG_RTS5208_DEBUG option

2014-07-07 Thread Fabio Falzoi
CONFIG_RTS5208_DEBUG is no more needed, we rely on dynamic debug config options
instead.

Signed-off-by: Fabio Falzoi 
---
 drivers/staging/rts5208/Kconfig | 7 ---
 drivers/staging/rts5208/sd.c| 5 +
 2 files changed, 1 insertion(+), 11 deletions(-)

diff --git a/drivers/staging/rts5208/Kconfig b/drivers/staging/rts5208/Kconfig
index 055655c..05c990f 100644
--- a/drivers/staging/rts5208/Kconfig
+++ b/drivers/staging/rts5208/Kconfig
@@ -6,10 +6,3 @@ config RTS5208
  PCI-E card reader rts5208/rts5288.
 
  If this driver is compiled as a module, it will be named rts5208.
-
-config RTS5208_DEBUG
-   bool "Realtek PCI-E Card Reader RTS5208/5288 verbose debug"
-   depends on RTS5208
-   help
- Say Y here in order to have the rts5208 code generate
- verbose debugging messages.
diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c
index 2f50f9c..4b51ee4 100644
--- a/drivers/staging/rts5208/sd.c
+++ b/drivers/staging/rts5208/sd.c
@@ -811,12 +811,10 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 
sample_point, u8 tune_dir)
PHASE_NOT_RESET);
RTSX_WRITE_REG(chip, CLK_CTL, CHANGE_CLK, 0);
} else {
-#ifdef CONFIG_RTS5208_DEBUG
rtsx_read_register(chip, SD_VP_CTL, &val);
pr_debug("SD_VP_CTL: 0x%x\n", val);
rtsx_read_register(chip, SD_DCMPS_CTL, &val);
pr_debug("SD_DCMPS_CTL: 0x%x\n", val);
-#endif
 
if (ddr_rx) {
RTSX_WRITE_REG(chip, SD_VP_CTL, PHASE_CHANGE,
@@ -862,12 +860,11 @@ static int sd_change_phase(struct rtsx_chip *chip, u8 
sample_point, u8 tune_dir)
return STATUS_SUCCESS;
 
 Fail:
-#ifdef CONFIG_RTS5208_DEBUG
rtsx_read_register(chip, SD_VP_CTL, &val);
pr_debug("SD_VP_CTL: 0x%x\n", val);
rtsx_read_register(chip, SD_DCMPS_CTL, &val);
pr_debug("SD_DCMPS_CTL: 0x%x\n", val);
-#endif
+
rtsx_write_register(chip, SD_DCMPS_CTL, DCMPS_CHANGE, 0);
rtsx_write_register(chip, SD_VP_CTL, PHASE_CHANGE, 0);
wait_timeout(10);
-- 
2.0.0

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: staging: dgap:

2014-07-07 Thread Dan Carpenter
On Tue, Jul 01, 2014 at 10:15:34AM -0400, Mark Hounschell wrote:
> Hi Dan,
> 
> I've been away for a while but should be able to find some time to work
> on the dgap driver some more. Do you have a TODO list?
> 

Really there is just a lot of misc clean up work to do.

Get rid of forward declarations.
Many of the function names are not sensible.
There are small indenting mistakes.
DIGI_CONCENTRATORS_SUPPORTED stuff is dead code and needs deleted.
dgap_remove_one() should be implemented I think?  The clean up code
doesn't look correct or nice to me.

regards,
dan carpenter

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] drivers: staging: android: ion: Kconfig: Let it also depend on HAS_DMA

2014-07-07 Thread Chen Gang
ION need HAS_DMA (e.g. need DMA_SHARED_BUFFER), so it has to depend on
HAS_DMA, or can not pass compiling with allmodconfig under score which
NO_DMA.  And the related error:

CC  drivers/staging/android/ion/ion_cma_heap.o
  drivers/staging/android/ion/ion_cma_heap.c: In function 'ion_cma_mmap':
  drivers/staging/android/ion/ion_cma_heap.c:168:2: error: implicit declaration 
of function 'dma_mmap_coherent' [-Werror=implicit-function-declaration]
return dma_mmap_coherent(dev, vma, info->cpu_addr, info->handle,
^
  cc1: some warnings being treated as errors
  make[4]: *** [drivers/staging/android/ion/ion_cma_heap.o] Error 1
  make[3]: *** [drivers/staging/android/ion] Error 2
  make[2]: *** [drivers/staging/android] Error 2
  make[1]: *** [drivers/staging] Error 2
  make: *** [drivers] Error 2


Signed-off-by: Chen Gang 
---
 drivers/staging/android/ion/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/android/ion/Kconfig 
b/drivers/staging/android/ion/Kconfig
index 0f8fec1..0a6e4d0 100644
--- a/drivers/staging/android/ion/Kconfig
+++ b/drivers/staging/android/ion/Kconfig
@@ -1,6 +1,6 @@
 menuconfig ION
bool "Ion Memory Manager"
-   depends on HAVE_MEMBLOCK
+   depends on HAVE_MEMBLOCK && HAS_DMA
select GENERIC_ALLOCATOR
select DMA_SHARED_BUFFER
---help---
-- 
1.9.2.459.g68773ac
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2] iio:trigger: Introduce the use of devm_kzalloc

2014-07-07 Thread Jonathan Cameron

On 01/07/14 22:19, Himangi Saraogi wrote:

This patch introduces the use of the managed version of kzalloc and
removes the kfrees in the probe and remove functions. More return
paths are added and the labels are renamed to order them.

Signed-off-by: Himangi Saraogi 

Looks sane, but I'd like an ack or reviewed-by from someone as Analog for this 
one.
cc'd Lars and Michael.


---
v2: add more return paths
Not compile tested.
  drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 31 ---
  1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c 
b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
index 16f1a06..a21b7c5 100644
--- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
+++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
@@ -182,45 +182,40 @@ static int iio_bfin_tmr_trigger_probe(struct 
platform_device *pdev)
unsigned int config;
int ret;

-   st = kzalloc(sizeof(*st), GFP_KERNEL);
-   if (st == NULL) {
-   ret = -ENOMEM;
-   goto out;
-   }
+   st = devm_kzalloc(&pdev->dev, sizeof(*st), GFP_KERNEL);
+   if (st == NULL)
+   return -ENOMEM;

st->irq = platform_get_irq(pdev, 0);
if (!st->irq) {
dev_err(&pdev->dev, "No IRQs specified");
-   ret = -ENODEV;
-   goto out1;
+   return -ENODEV;
}

ret = iio_bfin_tmr_get_number(st->irq);
if (ret < 0)
-   goto out1;
+   return ret;

st->timer_num = ret;
st->t = &iio_bfin_timer_code[st->timer_num];

st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
-   if (!st->trig) {
-   ret = -ENOMEM;
-   goto out1;
-   }
+   if (!st->trig)
+   return -ENOMEM;

st->trig->ops = &iio_bfin_tmr_trigger_ops;
st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups;
iio_trigger_set_drvdata(st->trig, st);
ret = iio_trigger_register(st->trig);
if (ret)
-   goto out2;
+   goto out;

ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
  0, st->trig->name, st);
if (ret) {
dev_err(&pdev->dev,
"request IRQ-%d failed", st->irq);
-   goto out4;
+   goto out1;
}

config = PWM_OUT | PERIOD_CNT | IRQ_ENA;
@@ -260,13 +255,10 @@ static int iio_bfin_tmr_trigger_probe(struct 
platform_device *pdev)
return 0;
  out_free_irq:
free_irq(st->irq, st);
-out4:
-   iio_trigger_unregister(st->trig);
-out2:
-   iio_trigger_put(st->trig);
  out1:
-   kfree(st);
+   iio_trigger_unregister(st->trig);
  out:
+   iio_trigger_put(st->trig);
return ret;
  }

@@ -280,7 +272,6 @@ static int iio_bfin_tmr_trigger_remove(struct 
platform_device *pdev)
free_irq(st->irq, st);
iio_trigger_unregister(st->trig);
iio_trigger_put(st->trig);
-   kfree(st);

return 0;
  }



___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: iio: Introduce the use of devm_ioremap_resource

2014-07-07 Thread Jonathan Cameron

On 01/07/14 19:44, Himangi Saraogi wrote:

This patch introduces the use of devm_ioremap_resource. It does away
with call to request_mem_region and the error checking on
platform_get_resource. Also, the calls to free the allocated resources
like release_mem_region and iounmap are done away with. The ret variable
in the probe function is also eliminated. Also, a bug is fixed as the
goto in the error handling of request_mem_region should not have
called release_mem_region which releases a resource that has not been
allocated.

Signed-off-by: Himangi Saraogi 
Acked-by: Julia Lawall 

Again, looks superficially fine, but I'd like an ack from someone
at Analog ideally.
Cc'd Lars

---
  drivers/staging/iio/adc/ad7606_par.c | 37 ++--
  1 file changed, 6 insertions(+), 31 deletions(-)

diff --git a/drivers/staging/iio/adc/ad7606_par.c 
b/drivers/staging/iio/adc/ad7606_par.c
index 8a48d18..7511839 100644
--- a/drivers/staging/iio/adc/ad7606_par.c
+++ b/drivers/staging/iio/adc/ad7606_par.c
@@ -53,7 +53,7 @@ static int ad7606_par_probe(struct platform_device *pdev)
struct iio_dev *indio_dev;
void __iomem *addr;
resource_size_t remap_size;
-   int ret, irq;
+   int irq;

irq = platform_get_irq(pdev, 0);
if (irq < 0) {
@@ -62,56 +62,31 @@ static int ad7606_par_probe(struct platform_device *pdev)
}

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   if (!res)
-   return -ENODEV;
+   addr = devm_ioremap_resource(&pdev->dev, res);
+   if (IS_ERR(addr))
+   return PTR_ERR(addr);

remap_size = resource_size(res);

-   /* Request the regions */
-   if (!request_mem_region(res->start, remap_size, "iio-ad7606")) {
-   ret = -EBUSY;
-   goto out1;
-   }
-   addr = ioremap(res->start, remap_size);
-   if (!addr) {
-   ret = -ENOMEM;
-   goto out1;
-   }
-
indio_dev = ad7606_probe(&pdev->dev, irq, addr,
  platform_get_device_id(pdev)->driver_data,
  remap_size > 1 ? &ad7606_par16_bops :
  &ad7606_par8_bops);

-   if (IS_ERR(indio_dev))  {
-   ret = PTR_ERR(indio_dev);
-   goto out2;
-   }
+   if (IS_ERR(indio_dev))
+   return PTR_ERR(indio_dev);

platform_set_drvdata(pdev, indio_dev);

return 0;
-
-out2:
-   iounmap(addr);
-out1:
-   release_mem_region(res->start, remap_size);
-
-   return ret;
  }

  static int ad7606_par_remove(struct platform_device *pdev)
  {
struct iio_dev *indio_dev = platform_get_drvdata(pdev);
-   struct resource *res;
-   struct ad7606_state *st = iio_priv(indio_dev);

ad7606_remove(indio_dev, platform_get_irq(pdev, 0));

-   iounmap(st->base_address);
-   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-   release_mem_region(res->start, resource_size(res));
-
return 0;
  }




___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: iio: Introduce the use of devm_ioremap_resource

2014-07-07 Thread Lars-Peter Clausen

On 07/07/2014 02:36 PM, Jonathan Cameron wrote:

On 01/07/14 19:44, Himangi Saraogi wrote:

This patch introduces the use of devm_ioremap_resource. It does away
with call to request_mem_region and the error checking on
platform_get_resource. Also, the calls to free the allocated resources
like release_mem_region and iounmap are done away with. The ret variable
in the probe function is also eliminated. Also, a bug is fixed as the
goto in the error handling of request_mem_region should not have
called release_mem_region which releases a resource that has not been
allocated.

Signed-off-by: Himangi Saraogi 
Acked-by: Julia Lawall 

Again, looks superficially fine, but I'd like an ack from someone
at Analog ideally.
Cc'd Lars


Acked-by: Lars-Peter Clausen 

Thanks.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2] iio:trigger: Introduce the use of devm_kzalloc

2014-07-07 Thread Lars-Peter Clausen

On 07/07/2014 02:34 PM, Jonathan Cameron wrote:

On 01/07/14 22:19, Himangi Saraogi wrote:

This patch introduces the use of the managed version of kzalloc and
removes the kfrees in the probe and remove functions. More return
paths are added and the labels are renamed to order them.

Signed-off-by: Himangi Saraogi 

Looks sane, but I'd like an ack or reviewed-by from someone as Analog for
this one.
cc'd Lars and Michael.


Acked-by: Lars-Peter Clausen 

Thanks.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


re: staging: rtl8188eu:Remove rtw_zmalloc(), wrapper for kzalloc()

2014-07-07 Thread Dan Carpenter
Hello navin patidar,

The patch fadbe0cd5292: "staging: rtl8188eu:Remove rtw_zmalloc(),
wrapper for kzalloc()" from Jun 22, 2014, leads to the following
static checker warning:

drivers/staging/rtl8188eu/core/rtw_cmd.c:1234 rtw_setassocsta_cmd()
warn: struct type mismatch 'set_stakey_rsp vs set_assocsta_rsp'

drivers/staging/rtl8188eu/core/rtw_cmd.c:1234 rtw_setassocsta_cmd()
error: not allocating enough data 8 vs 4

drivers/staging/rtl8188eu/core/rtw_cmd.c
  1216  struct set_stakey_rsp *psetassocsta_rsp = NULL;
   ^^
  1217  
  1218  u8  res = _SUCCESS;
  1219  
  1220  
  1221  ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
  1222  if (ph2c == NULL) {
  1223  res = _FAIL;
  1224  goto exit;
  1225  }
  1226  
  1227  psetassocsta_para = kzalloc(sizeof(struct set_assocsta_parm), 
GFP_KERNEL);
  ^
  1228  if (psetassocsta_para == NULL) {
  1229  kfree(ph2c);
  1230  res = _FAIL;
  1231  goto exit;
  1232  }
  1233  
  1234  psetassocsta_rsp = kzalloc(sizeof(struct set_assocsta_rsp), 
GFP_KERNEL);
  1235  if (psetassocsta_rsp == NULL) {
  1236  kfree(ph2c);
  1237  kfree(psetassocsta_para);
  1238  return _FAIL;
  1239  }
  1240  
  1241  init_h2fwcmd_w_parm_no_rsp(ph2c, psetassocsta_para, 
_SetAssocSta_CMD_);
  1242  ph2c->rsp = (u8 *)psetassocsta_rsp;
  1243  ph2c->rspsz = sizeof(struct set_assocsta_rsp);

These things should all match but I don't know the code well enough to
say what the intent was.

The code was buggy before you touched it, but your cleanup fixed it so
my static checker could parse it.

regards,
dan carpenter
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2] iio:trigger: Introduce the use of devm_kzalloc

2014-07-07 Thread Julia Lawall
On Mon, 7 Jul 2014, Jonathan Cameron wrote:

> On 01/07/14 22:19, Himangi Saraogi wrote:
> > This patch introduces the use of the managed version of kzalloc and
> > removes the kfrees in the probe and remove functions. More return
> > paths are added and the labels are renamed to order them.
> >
> > Signed-off-by: Himangi Saraogi 
> Looks sane, but I'd like an ack or reviewed-by from someone as Analog for this
> one.
> cc'd Lars and Michael.

Should MAINTAINERS be updated somehow?

julia

>
> > ---
> > v2: add more return paths
> > Not compile tested.
> >   drivers/staging/iio/trigger/iio-trig-bfin-timer.c | 31
> > ---
> >   1 file changed, 11 insertions(+), 20 deletions(-)
> >
> > diff --git a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> > b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> > index 16f1a06..a21b7c5 100644
> > --- a/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> > +++ b/drivers/staging/iio/trigger/iio-trig-bfin-timer.c
> > @@ -182,45 +182,40 @@ static int iio_bfin_tmr_trigger_probe(struct
> > platform_device *pdev)
> > unsigned int config;
> > int ret;
> >
> > -   st = kzalloc(sizeof(*st), GFP_KERNEL);
> > -   if (st == NULL) {
> > -   ret = -ENOMEM;
> > -   goto out;
> > -   }
> > +   st = devm_kzalloc(&pdev->dev, sizeof(*st), GFP_KERNEL);
> > +   if (st == NULL)
> > +   return -ENOMEM;
> >
> > st->irq = platform_get_irq(pdev, 0);
> > if (!st->irq) {
> > dev_err(&pdev->dev, "No IRQs specified");
> > -   ret = -ENODEV;
> > -   goto out1;
> > +   return -ENODEV;
> > }
> >
> > ret = iio_bfin_tmr_get_number(st->irq);
> > if (ret < 0)
> > -   goto out1;
> > +   return ret;
> >
> > st->timer_num = ret;
> > st->t = &iio_bfin_timer_code[st->timer_num];
> >
> > st->trig = iio_trigger_alloc("bfintmr%d", st->timer_num);
> > -   if (!st->trig) {
> > -   ret = -ENOMEM;
> > -   goto out1;
> > -   }
> > +   if (!st->trig)
> > +   return -ENOMEM;
> >
> > st->trig->ops = &iio_bfin_tmr_trigger_ops;
> > st->trig->dev.groups = iio_bfin_tmr_trigger_attr_groups;
> > iio_trigger_set_drvdata(st->trig, st);
> > ret = iio_trigger_register(st->trig);
> > if (ret)
> > -   goto out2;
> > +   goto out;
> >
> > ret = request_irq(st->irq, iio_bfin_tmr_trigger_isr,
> >   0, st->trig->name, st);
> > if (ret) {
> > dev_err(&pdev->dev,
> > "request IRQ-%d failed", st->irq);
> > -   goto out4;
> > +   goto out1;
> > }
> >
> > config = PWM_OUT | PERIOD_CNT | IRQ_ENA;
> > @@ -260,13 +255,10 @@ static int iio_bfin_tmr_trigger_probe(struct
> > platform_device *pdev)
> > return 0;
> >   out_free_irq:
> > free_irq(st->irq, st);
> > -out4:
> > -   iio_trigger_unregister(st->trig);
> > -out2:
> > -   iio_trigger_put(st->trig);
> >   out1:
> > -   kfree(st);
> > +   iio_trigger_unregister(st->trig);
> >   out:
> > +   iio_trigger_put(st->trig);
> > return ret;
> >   }
> >
> > @@ -280,7 +272,6 @@ static int iio_bfin_tmr_trigger_remove(struct
> > platform_device *pdev)
> > free_irq(st->irq, st);
> > iio_trigger_unregister(st->trig);
> > iio_trigger_put(st->trig);
> > -   kfree(st);
> >
> > return 0;
> >   }
> >
>
>
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2] iio:trigger: Introduce the use of devm_kzalloc

2014-07-07 Thread Lars-Peter Clausen

On 07/07/2014 02:52 PM, Julia Lawall wrote:

On Mon, 7 Jul 2014, Jonathan Cameron wrote:


On 01/07/14 22:19, Himangi Saraogi wrote:

This patch introduces the use of the managed version of kzalloc and
removes the kfrees in the probe and remove functions. More return
paths are added and the labels are renamed to order them.

Signed-off-by: Himangi Saraogi 

Looks sane, but I'd like an ack or reviewed-by from someone as Analog for this
one.
cc'd Lars and Michael.


Should MAINTAINERS be updated somehow?

julia


yea, it's been on my todo list for a while.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: iio: remove duplicate case labels

2014-07-07 Thread Daniel Baluta
Otherwise, compiling iio_event_monitor program fails:

io_event_monitor.c: In function ‘event_is_known’:
iio_event_monitor.c:125:2: error: duplicate case value
  case IIO_MOD_LIGHT_BOTH:
  ^
iio_event_monitor.c:121:2: error: previously used here
  case IIO_MOD_LIGHT_BOTH:

Fixes: da4db94 (iio staging: add recently added modifiers to iio_event_monitor)
Signed-off-by: Daniel Baluta 
---
 drivers/staging/iio/Documentation/iio_event_monitor.c | 2 --
 1 file changed, 2 deletions(-)

diff --git a/drivers/staging/iio/Documentation/iio_event_monitor.c 
b/drivers/staging/iio/Documentation/iio_event_monitor.c
index cb35a97..569d6f8 100644
--- a/drivers/staging/iio/Documentation/iio_event_monitor.c
+++ b/drivers/staging/iio/Documentation/iio_event_monitor.c
@@ -122,8 +122,6 @@ static bool event_is_known(struct iio_event_data *event)
case IIO_MOD_LIGHT_IR:
case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
case IIO_MOD_SUM_SQUARED_X_Y_Z:
-   case IIO_MOD_LIGHT_BOTH:
-   case IIO_MOD_LIGHT_IR:
case IIO_MOD_LIGHT_CLEAR:
case IIO_MOD_LIGHT_RED:
case IIO_MOD_LIGHT_GREEN:
-- 
1.9.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 00/10] lib: introduce string_escape_mem an %*pE specifier

2014-07-07 Thread Andy Shevchenko
The introduced function is a kind of opposite to string_unescape. We have
several users of such functionality each of them created custom implementation.
The series contains clean up of test suite, adding new call, and switching few
users to use it via %*pE specifier.

Test suite covers all of existing and most of potential use cases.

Changelog v2:
- addressed Joe's comments:
  - added patch 4/10
  - moving patches 5/10-10/10 to %*pE instead of direct string_escape_mem call,
as a result the series and code looks cleaner 
- address few of Andrew's comments:
  - added patch 1/10
  - kernel documentation moved to c-file
  - when test case fails the necessary messages are printed on KERN_WARNING
level

Andy Shevchenko (10):
  lib / string_helpers: move documentation to c-file
  lib / string_helpers: refactoring the test suite
  lib / string_helpers: introduce string_escape_mem()
  lib/vsprintf: add %*pE[achnops] format specifier
  wireless: libertas: print esaped string via %*pE
  wireless: ipw2x00: print SSID via %*pE
  lib80211: remove unused print_ssid()
  staging: wlan-ng: use %*pEhp to print SN
  staging: rtl8192e: use %*pEn to escape buffer
  staging: rtl8192u: use %*pEn to escape buffer

 Documentation/printk-formats.txt   |  28 +++
 drivers/net/wireless/ipw2x00/ipw2100.c |  22 +-
 drivers/net/wireless/ipw2x00/ipw2200.c | 270 +++--
 drivers/net/wireless/ipw2x00/libipw_rx.c   |  65 +++---
 drivers/net/wireless/ipw2x00/libipw_wx.c   |  16 +-
 drivers/net/wireless/libertas/cfg.c|   8 +-
 drivers/net/wireless/libertas/mesh.c   |   7 +-
 drivers/staging/rtl8192e/rtllib.h  |  14 +-
 drivers/staging/rtl8192u/ieee80211/ieee80211.h |  14 +-
 drivers/staging/wlan-ng/prism2sta.c|  28 +--
 include/linux/string_helpers.h |  65 +++---
 include/net/lib80211.h |   5 -
 lib/string_helpers.c   | 312 +
 lib/test-string_helpers.c  | 250 +++-
 lib/vsprintf.c |  72 ++
 net/wireless/lib80211.c|  32 ---
 16 files changed, 817 insertions(+), 391 deletions(-)

-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 03/10] lib / string_helpers: introduce string_escape_mem()

2014-07-07 Thread Andy Shevchenko
This is almost the opposite function to string_unescape(). Nevertheless it
handles \0 and could be used for any byte buffer.

The documentation is supplied together with the function prototype.

The test cases covers most of the scenarios and would be expanded later on.

Signed-off-by: Andy Shevchenko 
---
 include/linux/string_helpers.h |  31 +
 lib/string_helpers.c   | 274 +
 lib/test-string_helpers.c  | 213 
 3 files changed, 518 insertions(+)

diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
index 5a30f2a..6eb567a 100644
--- a/include/linux/string_helpers.h
+++ b/include/linux/string_helpers.h
@@ -37,4 +37,35 @@ static inline int string_unescape_any_inplace(char *buf)
return string_unescape_any(buf, buf, 0);
 }
 
+#define ESCAPE_SPACE   0x01
+#define ESCAPE_SPECIAL 0x02
+#define ESCAPE_NULL0x04
+#define ESCAPE_OCTAL   0x08
+#define ESCAPE_ANY \
+   (ESCAPE_SPACE | ESCAPE_OCTAL | ESCAPE_SPECIAL | ESCAPE_NULL)
+#define ESCAPE_NP  0x10
+#define ESCAPE_ANY_NP  (ESCAPE_ANY | ESCAPE_NP)
+#define ESCAPE_HEX 0x20
+
+int string_escape_mem(const char *src, size_t isz, char **dst, size_t osz,
+   unsigned int flags, const char *esc);
+
+static inline int string_escape_mem_any_np(const char *src, size_t isz,
+   char **dst, size_t osz, const char *esc)
+{
+   return string_escape_mem(src, isz, dst, osz, ESCAPE_ANY_NP, esc);
+}
+
+static inline int string_escape_str(const char *src, char **dst, size_t sz,
+   unsigned int flags, const char *esc)
+{
+   return string_escape_mem(src, strlen(src), dst, sz, flags, esc);
+}
+
+static inline int string_escape_str_any_np(const char *src, char **dst,
+   size_t sz, const char *esc)
+{
+   return string_escape_str(src, dst, sz, ESCAPE_ANY_NP, esc);
+}
+
 #endif
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 74ec604..58b78ba 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -8,6 +8,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 #include 
 
 /**
@@ -240,3 +242,275 @@ int string_unescape(char *src, char *dst, size_t size, 
unsigned int flags)
return out - dst;
 }
 EXPORT_SYMBOL(string_unescape);
+
+static int escape_passthrough(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+
+   if (*osz < 1)
+   return -ENOMEM;
+
+   *out++ = c;
+
+   *dst = out;
+   *osz -= 1;
+
+   return 1;
+}
+
+static int escape_space(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+   unsigned char to;
+
+   if (*osz < 2)
+   return -ENOMEM;
+
+   switch (c) {
+   case '\n':
+   to = 'n';
+   break;
+   case '\r':
+   to = 'r';
+   break;
+   case '\t':
+   to = 't';
+   break;
+   case '\v':
+   to = 'v';
+   break;
+   case '\f':
+   to = 'f';
+   break;
+   default:
+   return 0;
+   }
+
+   *out++ = '\\';
+   *out++ = to;
+
+   *dst = out;
+   *osz -= 2;
+
+   return 1;
+}
+
+static int escape_special(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+   unsigned char to;
+
+   if (*osz < 2)
+   return -ENOMEM;
+
+   switch (c) {
+   case '\\':
+   to = '\\';
+   break;
+   case '\a':
+   to = 'a';
+   break;
+   case '\e':
+   to = 'e';
+   break;
+   default:
+   return 0;
+   }
+
+   *out++ = '\\';
+   *out++ = to;
+
+   *dst = out;
+   *osz -= 2;
+
+   return 1;
+}
+
+static int escape_null(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+
+   if (*osz < 2)
+   return -ENOMEM;
+
+   if (c)
+   return 0;
+
+   *out++ = '\\';
+   *out++ = '0';
+
+   *dst = out;
+   *osz -= 2;
+
+   return 1;
+}
+
+static int escape_octal(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+
+   if (*osz < 4)
+   return -ENOMEM;
+
+   *out++ = '\\';
+   *out++ = ((c >> 6) & 0x07) + '0';
+   *out++ = ((c >> 3) & 0x07) + '0';
+   *out++ = ((c >> 0) & 0x07) + '0';
+
+   *dst = out;
+   *osz -= 4;
+
+   return 1;
+}
+
+static int escape_hex(unsigned char c, char **dst, size_t *osz)
+{
+   char *out = *dst;
+
+   if (*osz < 4)
+   return -ENOMEM;
+
+   *out++ = '\\';
+   *out++ = 'x';
+   *out++ = hex_asc_hi(c);
+   *out++ = hex_asc_lo(c);
+
+   *dst = out;
+   *osz -= 4;
+
+   return 1;
+}
+
+/**
+ * string_escape_mem - quote characters in the given memory buffer
+ * @src:  

[PATCH v2 09/10] staging: rtl8192e: use %*pEn to escape buffer

2014-07-07 Thread Andy Shevchenko
Let's use kernel's native specifier to escape a buffer.

Signed-off-by: Andy Shevchenko 
---
 drivers/staging/rtl8192e/rtllib.h | 14 +-
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/drivers/staging/rtl8192e/rtllib.h 
b/drivers/staging/rtl8192e/rtllib.h
index 83f5f57..9840be0 100644
--- a/drivers/staging/rtl8192e/rtllib.h
+++ b/drivers/staging/rtl8192e/rtllib.h
@@ -2956,25 +2956,13 @@ extern inline int rtllib_get_scans(struct rtllib_device 
*ieee)
 static inline const char *escape_essid(const char *essid, u8 essid_len)
 {
static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
-   const char *s = essid;
-   char *d = escaped;
 
if (rtllib_is_empty_essid(essid, essid_len)) {
memcpy(escaped, "", sizeof(""));
return escaped;
}
 
-   essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE);
-   while (essid_len--) {
-   if (*s == '\0') {
-   *d++ = '\\';
-   *d++ = '0';
-   s++;
-   } else {
-   *d++ = *s++;
-   }
-   }
-   *d = '\0';
+   snprintf(escaped, sizeof(escaped), "%*pEn", essid_len, essid);
return escaped;
 }
 
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 07/10] lib80211: remove unused print_ssid()

2014-07-07 Thread Andy Shevchenko
In kernel we have %*pE specifier to print an escaped buffer. All users now
switched to that approach.

This fixes a bug as well. The current implementation wrongly prints octal
numbers: only two first digits are used in case when 3 are required and the
rest of the string ends up cut off.

Additionally by default the \f, \v, \a, and \e are escaped to their alphabetic
representation. It's safe to do since it is currently used for messaging only.

Signed-off-by: Andy Shevchenko 
---
 include/net/lib80211.h  |  5 -
 net/wireless/lib80211.c | 32 
 2 files changed, 37 deletions(-)

diff --git a/include/net/lib80211.h b/include/net/lib80211.h
index be95b92..aab0f42 100644
--- a/include/net/lib80211.h
+++ b/include/net/lib80211.h
@@ -32,11 +32,6 @@
 #include 
 #include 
 
-/* print_ssid() is intended to be used in debug (and possibly error)
- * messages. It should never be used for passing ssid to user space. */
-const char *print_ssid(char *buf, const char *ssid, u8 ssid_len);
-#define DECLARE_SSID_BUF(var) char var[IEEE80211_MAX_SSID_LEN * 4 + 1] 
__maybe_unused
-
 #define NUM_WEP_KEYS   4
 
 enum {
diff --git a/net/wireless/lib80211.c b/net/wireless/lib80211.c
index a55c27b..4596115 100644
--- a/net/wireless/lib80211.c
+++ b/net/wireless/lib80211.c
@@ -46,38 +46,6 @@ static void lib80211_crypt_deinit_entries(struct 
lib80211_crypt_info *info,
 static void lib80211_crypt_quiescing(struct lib80211_crypt_info *info);
 static void lib80211_crypt_deinit_handler(unsigned long data);
 
-const char *print_ssid(char *buf, const char *ssid, u8 ssid_len)
-{
-   const char *s = ssid;
-   char *d = buf;
-
-   ssid_len = min_t(u8, ssid_len, IEEE80211_MAX_SSID_LEN);
-   while (ssid_len--) {
-   if (isprint(*s)) {
-   *d++ = *s++;
-   continue;
-   }
-
-   *d++ = '\\';
-   if (*s == '\0')
-   *d++ = '0';
-   else if (*s == '\n')
-   *d++ = 'n';
-   else if (*s == '\r')
-   *d++ = 'r';
-   else if (*s == '\t')
-   *d++ = 't';
-   else if (*s == '\\')
-   *d++ = '\\';
-   else
-   d += snprintf(d, 3, "%03o", *s);
-   s++;
-   }
-   *d = '\0';
-   return buf;
-}
-EXPORT_SYMBOL(print_ssid);
-
 int lib80211_crypt_info_init(struct lib80211_crypt_info *info, char *name,
spinlock_t *lock)
 {
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 02/10] lib / string_helpers: refactoring the test suite

2014-07-07 Thread Andy Shevchenko
This patch prepares test suite for a following update. It introduces
test_string_check_buf() helper which checks the result and dumps an error.

Signed-off-by: Andy Shevchenko 
---
 lib/test-string_helpers.c | 39 +++
 1 file changed, 27 insertions(+), 12 deletions(-)

diff --git a/lib/test-string_helpers.c b/lib/test-string_helpers.c
index 6ac48de..ac44c92 100644
--- a/lib/test-string_helpers.c
+++ b/lib/test-string_helpers.c
@@ -10,6 +10,26 @@
 #include 
 #include 
 
+static __init bool test_string_check_buf(const char *name, unsigned int flags,
+char *in, size_t p,
+char *out_real, size_t q_real,
+char *out_test, size_t q_test)
+{
+   if (q_real == q_test && !memcmp(out_test, out_real, q_test))
+   return true;
+
+   pr_warn("Test '%s' failed: flags = %u\n", name, flags);
+
+   print_hex_dump(KERN_WARNING, "Input: ", DUMP_PREFIX_NONE, 16, 1,
+  in, p, true);
+   print_hex_dump(KERN_WARNING, "Expected: ", DUMP_PREFIX_NONE, 16, 1,
+  out_test, q_test, true);
+   print_hex_dump(KERN_WARNING, "Got: ", DUMP_PREFIX_NONE, 16, 1,
+  out_real, q_real, true);
+
+   return false;
+}
+
 struct test_string {
const char *in;
const char *out;
@@ -39,7 +59,8 @@ static const struct test_string strings[] __initconst = {
},
 };
 
-static void __init test_string_unescape(unsigned int flags, bool inplace)
+static void __init test_string_unescape(const char *name, unsigned int flags,
+   bool inplace)
 {
char in[256];
char out_test[256];
@@ -77,15 +98,8 @@ static void __init test_string_unescape(unsigned int flags, 
bool inplace)
q_real = string_unescape(in, out_real, q_real, flags);
}
 
-   if (q_real != q_test || memcmp(out_test, out_real, q_test)) {
-   pr_warn("Test failed: flags = %u\n", flags);
-   print_hex_dump(KERN_WARNING, "Input: ",
-  DUMP_PREFIX_NONE, 16, 1, in, p - 1, true);
-   print_hex_dump(KERN_WARNING, "Expected: ",
-  DUMP_PREFIX_NONE, 16, 1, out_test, q_test, true);
-   print_hex_dump(KERN_WARNING, "Got: ",
-  DUMP_PREFIX_NONE, 16, 1, out_real, q_real, true);
-   }
+   test_string_check_buf(name, flags, in, p - 1, out_real, q_real,
+ out_test, q_test);
 }
 
 static int __init test_string_helpers_init(void)
@@ -94,8 +108,9 @@ static int __init test_string_helpers_init(void)
 
pr_info("Running tests...\n");
for (i = 0; i < UNESCAPE_ANY + 1; i++)
-   test_string_unescape(i, false);
-   test_string_unescape(get_random_int() % (UNESCAPE_ANY + 1), true);
+   test_string_unescape("unescape", i, false);
+   test_string_unescape("unescape inplace",
+get_random_int() % (UNESCAPE_ANY + 1), true);
 
return -EINVAL;
 }
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 04/10] lib/vsprintf: add %*pE[achnops] format specifier

2014-07-07 Thread Andy Shevchenko
This allows user to print a given buffer as esaped string. The rules applied
accordingly to the mix of the flags provided by additional format letters.

For example, if the given buffer:

1b 62 20 5c 43 07 22 90 0d 5d

The result strings could be:
%*pE"\eb \C\a"\220\r]"
%*pEhp  "\x1bb \C\x07"\x90\x0d]"
%*pEa   "\e\142\040\\\103\a\042\220\r\135"

Please, read Documentation/printk-formats.txt and lib/string_helpers.c kernel
documentation to get further information.

Signed-off-by: Andy Shevchenko 
Suggested-by: Joe Perches 
---
 Documentation/printk-formats.txt | 28 
 lib/vsprintf.c   | 72 
 2 files changed, 100 insertions(+)

diff --git a/Documentation/printk-formats.txt b/Documentation/printk-formats.txt
index 3b56a99..e2dc566 100644
--- a/Documentation/printk-formats.txt
+++ b/Documentation/printk-formats.txt
@@ -70,6 +70,34 @@ DMA addresses types dma_addr_t:
For printing a dma_addr_t type which can vary based on build options,
regardless of the width of the CPU data path. Passed by reference.
 
+Raw buffer as an escaped string:
+
+   %*pE[achnops]
+
+   For printing raw buffer as an escaped string. For the following buffer
+
+   1b 62 20 5c 43 07 22 90 0d 5d
+
+   few examples show how the conversion could be done (the result string
+   without embraced quotes):
+
+   %*pE"\eb \C\a"\220\r]"
+   %*pEhp  "\x1bb \C\x07"\x90\x0d]"
+   %*pEa   "\e\142\040\\\103\a\042\220\r\135"
+
+   The converion rules are defined by combination of the following flags
+   (see string_escape_mem() kernel documentation for the details):
+   a - ESCAPE_ANY
+   c - ESCAPE_SPECIAL
+   h - ESCAPE_HEX
+   n - ESCAPE_NULL
+   o - ESCAPE_OCTAL
+   p - ESCAPE_NP
+   s - ESCAPE_SPACE
+   By default ESCAPE_ANY_NP is used.
+
+   If field width is ommited the 1 byte only will be escaped.
+
 Raw buffer as a hex string:
%*ph00 01 02  ...  3f
%*phC   00:01:02: ... :3f
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 0eced40..6913046 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -33,6 +33,7 @@
 #include   /* for PAGE_SIZE */
 #include   /* for dereference_function_descriptor() */
 
+#include 
 #include "kstrtox.h"
 
 /**
@@ -1101,6 +1102,63 @@ char *ip4_addr_string_sa(char *buf, char *end, const 
struct sockaddr_in *sa,
 }
 
 static noinline_for_stack
+char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
+const char *fmt)
+{
+   bool found = true;
+   int count = 1;
+   unsigned int flags = 0;
+   int len;
+
+   if (spec.field_width == 0)
+   /* nothing to print */
+   return buf;
+
+   if (ZERO_OR_NULL_PTR(addr))
+   /* NULL pointer */
+   return string(buf, end, NULL, spec);
+
+   do {
+   switch (fmt[count++]) {
+   case 'a':
+   flags |= ESCAPE_ANY;
+   break;
+   case 'c':
+   flags |= ESCAPE_SPECIAL;
+   break;
+   case 'h':
+   flags |= ESCAPE_HEX;
+   break;
+   case 'n':
+   flags |= ESCAPE_NULL;
+   break;
+   case 'o':
+   flags |= ESCAPE_OCTAL;
+   break;
+   case 'p':
+   flags |= ESCAPE_NP;
+   break;
+   case 's':
+   flags |= ESCAPE_SPACE;
+   break;
+   default:
+   found = false;
+   break;
+   }
+   } while (found);
+
+   if (!flags)
+   flags = ESCAPE_ANY_NP;
+
+   len = spec.field_width < 0 ? 1 : spec.field_width;
+
+   /* Ignore the error. We print as many characters as we can */
+   string_escape_mem(addr, len, &buf, end - buf, flags, NULL);
+
+   return buf;
+}
+
+static noinline_for_stack
 char *uuid_string(char *buf, char *end, const u8 *addr,
  struct printf_spec spec, const char *fmt)
 {
@@ -1236,6 +1294,17 @@ int kptr_restrict __read_mostly;
  * - '[Ii][4S][hnbl]' IPv4 addresses in host, network, big or little endian 
order
  * - 'I[6S]c' for IPv6 addresses printed as specified by
  *   http://tools.ietf.org/html/rfc5952
+ * - 'E[achnops]' For an escaped buffer, where rules are defined by combination
+ *of the following flags (see string_escape_mem() for the
+ *details):
+ *  a - ESCAPE_ANY
+ *  c - ESCAPE_SPECIAL
+ *  h - ESCAPE_HEX
+ *  n -

[PATCH v2 05/10] wireless: libertas: print esaped string via %*pE

2014-07-07 Thread Andy Shevchenko
Instead of custom approach this allows to print escaped strings via recently
added kernel extension: %*pE.

Signed-off-by: Andy Shevchenko 
---
 drivers/net/wireless/libertas/cfg.c  | 8 ++--
 drivers/net/wireless/libertas/mesh.c | 7 +++
 2 files changed, 5 insertions(+), 10 deletions(-)

diff --git a/drivers/net/wireless/libertas/cfg.c 
b/drivers/net/wireless/libertas/cfg.c
index 47a998d..1188814 100644
--- a/drivers/net/wireless/libertas/cfg.c
+++ b/drivers/net/wireless/libertas/cfg.c
@@ -590,7 +590,6 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned 
long dummy,
int chan_no = -1;
const u8 *ssid = NULL;
u8 ssid_len = 0;
-   DECLARE_SSID_BUF(ssid_buf);
 
int len = get_unaligned_le16(pos);
pos += 2;
@@ -644,10 +643,8 @@ static int lbs_ret_scan(struct lbs_private *priv, unsigned 
long dummy,
struct ieee80211_channel *channel =
ieee80211_get_channel(wiphy, freq);
 
-   lbs_deb_scan("scan: %pM, capa %04x, chan %2d, %s, "
-"%d dBm\n",
-bssid, capa, chan_no,
-print_ssid(ssid_buf, ssid, ssid_len),
+   lbs_deb_scan("scan: %pM, capa %04x, chan %2d, %*pE, %d 
dBm\n",
+bssid, capa, chan_no, ssid_len, ssid,
 LBS_SCAN_RSSI_TO_MBM(rssi)/100);
 
if (channel &&
@@ -1982,7 +1979,6 @@ static int lbs_join_ibss(struct wiphy *wiphy, struct 
net_device *dev,
struct lbs_private *priv = wiphy_priv(wiphy);
int ret = 0;
struct cfg80211_bss *bss;
-   DECLARE_SSID_BUF(ssid_buf);
 
if (dev == priv->mesh_dev)
return -EOPNOTSUPP;
diff --git a/drivers/net/wireless/libertas/mesh.c 
b/drivers/net/wireless/libertas/mesh.c
index 6fef746..b211ff8 100644
--- a/drivers/net/wireless/libertas/mesh.c
+++ b/drivers/net/wireless/libertas/mesh.c
@@ -93,7 +93,6 @@ static int lbs_mesh_config(struct lbs_private *priv, uint16_t 
action,
 {
struct cmd_ds_mesh_config cmd;
struct mrvl_meshie *ie;
-   DECLARE_SSID_BUF(ssid);
 
memset(&cmd, 0, sizeof(cmd));
cmd.channel = cpu_to_le16(chan);
@@ -122,9 +121,9 @@ static int lbs_mesh_config(struct lbs_private *priv, 
uint16_t action,
default:
return -1;
}
-   lbs_deb_cmd("mesh config action %d type %x channel %d SSID %s\n",
-   action, priv->mesh_tlv, chan,
-   print_ssid(ssid, priv->mesh_ssid, priv->mesh_ssid_len));
+   lbs_deb_cmd("mesh config action %d type %x channel %d SSID %*pE\n",
+   action, priv->mesh_tlv, chan, priv->mesh_ssid_len,
+   priv->mesh_ssid);
 
return __lbs_mesh_config_send(priv, &cmd, action, priv->mesh_tlv);
 }
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 08/10] staging: wlan-ng: use %*pEhp to print SN

2014-07-07 Thread Andy Shevchenko
This is a generic specifier to print an escaped buffer by given criteria. Let's
use it instead of custom approach.

Signed-off-by: Andy Shevchenko 
---
 drivers/staging/wlan-ng/prism2sta.c | 28 ++--
 1 file changed, 2 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/wlan-ng/prism2sta.c 
b/drivers/staging/wlan-ng/prism2sta.c
index 209e4db..688e827 100644
--- a/drivers/staging/wlan-ng/prism2sta.c
+++ b/drivers/staging/wlan-ng/prism2sta.c
@@ -60,7 +60,6 @@
 #include 
 #include 
 #include 
-#include 
 
 #include 
 #include 
@@ -81,27 +80,6 @@
 #include "hfa384x.h"
 #include "prism2mgmt.h"
 
-/* Create a string of printable chars from something that might not be */
-/* It's recommended that the str be 4*len + 1 bytes long */
-#define wlan_mkprintstr(buf, buflen, str, strlen) \
-{ \
-   int i = 0; \
-   int j = 0; \
-   memset(str, 0, (strlen)); \
-   for (i = 0; i < (buflen); i++) { \
-   if (isprint((buf)[i])) { \
-   (str)[j] = (buf)[i]; \
-   j++; \
-   } else { \
-   (str)[j] = '\\'; \
-   (str)[j+1] = 'x'; \
-   (str)[j+2] = hex_asc_hi((buf)[i]); \
-   (str)[j+3] = hex_asc_lo((buf)[i]); \
-   j += 4; \
-   } \
-   } \
-}
-
 static char *dev_info = "prism2_usb";
 static wlandevice_t *create_wlan(void);
 
@@ -607,7 +585,6 @@ static int prism2sta_getcardinfo(wlandevice_t *wlandev)
hfa384x_t *hw = (hfa384x_t *) wlandev->priv;
u16 temp;
u8 snum[HFA384x_RID_NICSERIALNUMBER_LEN];
-   char pstr[(HFA384x_RID_NICSERIALNUMBER_LEN * 4) + 1];
 
/* Collect version and compatibility info */
/*  Some are critical, some are not */
@@ -862,9 +839,8 @@ static int prism2sta_getcardinfo(wlandevice_t *wlandev)
result = hfa384x_drvr_getconfig(hw, HFA384x_RID_NICSERIALNUMBER,
snum, HFA384x_RID_NICSERIALNUMBER_LEN);
if (!result) {
-   wlan_mkprintstr(snum, HFA384x_RID_NICSERIALNUMBER_LEN,
-   pstr, sizeof(pstr));
-   netdev_info(wlandev->netdev, "Prism2 card SN: %s\n", pstr);
+   netdev_info(wlandev->netdev, "Prism2 card SN: %*pEhp\n",
+   HFA384x_RID_NICSERIALNUMBER_LEN, snum);
} else {
netdev_err(wlandev->netdev, "Failed to retrieve Prism2 Card 
SN\n");
goto failed;
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 06/10] wireless: ipw2x00: print SSID via %*pE

2014-07-07 Thread Andy Shevchenko
Instead of custom approach this allows to print escaped strings via recently
added kernel extension: %*pE.

Signed-off-by: Andy Shevchenko 
---
 drivers/net/wireless/ipw2x00/ipw2100.c   |  22 +--
 drivers/net/wireless/ipw2x00/ipw2200.c   | 270 ++-
 drivers/net/wireless/ipw2x00/libipw_rx.c |  65 +++-
 drivers/net/wireless/ipw2x00/libipw_wx.c |  16 +-
 4 files changed, 126 insertions(+), 247 deletions(-)

diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c 
b/drivers/net/wireless/ipw2x00/ipw2100.c
index 1ab8e50..aac2953 100644
--- a/drivers/net/wireless/ipw2x00/ipw2100.c
+++ b/drivers/net/wireless/ipw2x00/ipw2100.c
@@ -2005,7 +2005,6 @@ static void isr_indicate_associated(struct ipw2100_priv 
*priv, u32 status)
u32 chan;
char *txratename;
u8 bssid[ETH_ALEN];
-   DECLARE_SSID_BUF(ssid);
 
/*
 * TBD: BSSID is usually 00:00:00:00:00:00 here and not
@@ -2067,8 +2066,8 @@ static void isr_indicate_associated(struct ipw2100_priv 
*priv, u32 status)
break;
}
 
-   IPW_DEBUG_INFO("%s: Associated with '%s' at %s, channel %d 
(BSSID=%pM)\n",
-  priv->net_dev->name, print_ssid(ssid, essid, essid_len),
+   IPW_DEBUG_INFO("%s: Associated with '%*pE' at %s, channel %d 
(BSSID=%pM)\n",
+  priv->net_dev->name, essid_len, essid,
   txratename, chan, bssid);
 
/* now we copy read ssid into dev */
@@ -2095,9 +2094,8 @@ static int ipw2100_set_essid(struct ipw2100_priv *priv, 
char *essid,
.host_command_length = ssid_len
};
int err;
-   DECLARE_SSID_BUF(ssid);
 
-   IPW_DEBUG_HC("SSID: '%s'\n", print_ssid(ssid, essid, ssid_len));
+   IPW_DEBUG_HC("SSID: '%*pE'\n", ssid_len, essid);
 
if (ssid_len)
memcpy(cmd.host_command_parameters, essid, ssid_len);
@@ -2138,11 +2136,8 @@ static int ipw2100_set_essid(struct ipw2100_priv *priv, 
char *essid,
 
 static void isr_indicate_association_lost(struct ipw2100_priv *priv, u32 
status)
 {
-   DECLARE_SSID_BUF(ssid);
-
IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE | IPW_DL_ASSOC,
- "disassociated: '%s' %pM\n",
- print_ssid(ssid, priv->essid, priv->essid_len),
+ "disassociated: '%*pE' %pM\n", priv->essid_len, priv->essid,
  priv->bssid);
 
priv->status &= ~(STATUS_ASSOCIATED | STATUS_ASSOCIATING);
@@ -6975,7 +6970,6 @@ static int ipw2100_wx_set_essid(struct net_device *dev,
char *essid = "";   /* ANY */
int length = 0;
int err = 0;
-   DECLARE_SSID_BUF(ssid);
 
mutex_lock(&priv->action_mutex);
if (!(priv->status & STATUS_INITIALIZED)) {
@@ -7005,8 +6999,7 @@ static int ipw2100_wx_set_essid(struct net_device *dev,
goto done;
}
 
-   IPW_DEBUG_WX("Setting ESSID: '%s' (%d)\n",
-print_ssid(ssid, essid, length), length);
+   IPW_DEBUG_WX("Setting ESSID: '%*pE' (%d)\n", length, essid, length);
 
priv->essid_len = length;
memcpy(priv->essid, essid, priv->essid_len);
@@ -7027,13 +7020,12 @@ static int ipw2100_wx_get_essid(struct net_device *dev,
 */
 
struct ipw2100_priv *priv = libipw_priv(dev);
-   DECLARE_SSID_BUF(ssid);
 
/* If we are associated, trying to associate, or have a statically
 * configured ESSID then return that; otherwise return ANY */
if (priv->config & CFG_STATIC_ESSID || priv->status & 
STATUS_ASSOCIATED) {
-   IPW_DEBUG_WX("Getting essid: '%s'\n",
-print_ssid(ssid, priv->essid, priv->essid_len));
+   IPW_DEBUG_WX("Getting essid: '%*pE'\n",
+priv->essid_len, priv->essid);
memcpy(extra, priv->essid, priv->essid_len);
wrqu->essid.length = priv->essid_len;
wrqu->essid.flags = 1;  /* active */
diff --git a/drivers/net/wireless/ipw2x00/ipw2200.c 
b/drivers/net/wireless/ipw2x00/ipw2200.c
index c5aa404..45ee86c 100644
--- a/drivers/net/wireless/ipw2x00/ipw2200.c
+++ b/drivers/net/wireless/ipw2x00/ipw2200.c
@@ -4496,7 +4496,6 @@ static void handle_scan_event(struct ipw_priv *priv)
 static void ipw_rx_notification(struct ipw_priv *priv,
   struct ipw_rx_notification *notif)
 {
-   DECLARE_SSID_BUF(ssid);
u16 size = le16_to_cpu(notif->size);
 
IPW_DEBUG_NOTIF("type = %i (%d bytes)\n", notif->subtype, size);
@@ -4509,9 +4508,8 @@ static void ipw_rx_notification(struct ipw_priv *priv,
case CMAS_ASSOCIATED:{
IPW_DEBUG(IPW_DL_NOTIF | IPW_DL_STATE |
  IPW_DL_ASSOC,
- "associated: '%s' %pM\n",
- print_ssid(ssid, priv->essid,
-   

[PATCH v2 01/10] lib / string_helpers: move documentation to c-file

2014-07-07 Thread Andy Shevchenko
The documentation of API belongs to c-file. This patch moves it accordingly.

There is no functional change.

Signed-off-by: Andy Shevchenko 
---
 include/linux/string_helpers.h | 34 --
 lib/string_helpers.c   | 38 ++
 2 files changed, 38 insertions(+), 34 deletions(-)

diff --git a/include/linux/string_helpers.h b/include/linux/string_helpers.h
index 396..5a30f2a 100644
--- a/include/linux/string_helpers.h
+++ b/include/linux/string_helpers.h
@@ -20,40 +20,6 @@ int string_get_size(u64 size, enum string_size_units units,
 #define UNESCAPE_ANY   \
(UNESCAPE_SPACE | UNESCAPE_OCTAL | UNESCAPE_HEX | UNESCAPE_SPECIAL)
 
-/**
- * string_unescape - unquote characters in the given string
- * @src:   source buffer (escaped)
- * @dst:   destination buffer (unescaped)
- * @size:  size of the destination buffer (0 to unlimit)
- * @flags: combination of the flags (bitwise OR):
- * %UNESCAPE_SPACE:
- * '\f' - form feed
- * '\n' - new line
- * '\r' - carriage return
- * '\t' - horizontal tab
- * '\v' - vertical tab
- * %UNESCAPE_OCTAL:
- * '\NNN' - byte with octal value NNN (1 to 3 digits)
- * %UNESCAPE_HEX:
- * '\xHH' - byte with hexadecimal value HH (1 to 2 digits)
- * %UNESCAPE_SPECIAL:
- * '\"' - double quote
- * '\\' - backslash
- * '\a' - alert (BEL)
- * '\e' - escape
- * %UNESCAPE_ANY:
- * all previous together
- *
- * Returns amount of characters processed to the destination buffer excluding
- * trailing '\0'.
- *
- * Because the size of the output will be the same as or less than the size of
- * the input, the transformation may be performed in place.
- *
- * Caller must provide valid source and destination pointers. Be aware that
- * destination buffer will always be NULL-terminated. Source string must be
- * NULL-terminated as well.
- */
 int string_unescape(char *src, char *dst, size_t size, unsigned int flags);
 
 static inline int string_unescape_inplace(char *buf, unsigned int flags)
diff --git a/lib/string_helpers.c b/lib/string_helpers.c
index 29033f3..74ec604 100644
--- a/lib/string_helpers.c
+++ b/lib/string_helpers.c
@@ -168,6 +168,44 @@ static bool unescape_special(char **src, char **dst)
return true;
 }
 
+/**
+ * string_unescape - unquote characters in the given string
+ * @src:   source buffer (escaped)
+ * @dst:   destination buffer (unescaped)
+ * @size:  size of the destination buffer (0 to unlimit)
+ * @flags: combination of the flags (bitwise OR):
+ * %UNESCAPE_SPACE:
+ * '\f' - form feed
+ * '\n' - new line
+ * '\r' - carriage return
+ * '\t' - horizontal tab
+ * '\v' - vertical tab
+ * %UNESCAPE_OCTAL:
+ * '\NNN' - byte with octal value NNN (1 to 3 digits)
+ * %UNESCAPE_HEX:
+ * '\xHH' - byte with hexadecimal value HH (1 to 2 digits)
+ * %UNESCAPE_SPECIAL:
+ * '\"' - double quote
+ * '\\' - backslash
+ * '\a' - alert (BEL)
+ * '\e' - escape
+ * %UNESCAPE_ANY:
+ * all previous together
+ *
+ * Description:
+ * The function unquotes characters in the given string.
+ *
+ * Because the size of the output will be the same as or less than the size of
+ * the input, the transformation may be performed in place.
+ *
+ * Caller must provide valid source and destination pointers. Be aware that
+ * destination buffer will always be NULL-terminated. Source string must be
+ * NULL-terminated as well.
+ *
+ * Return:
+ * The amount of the characters processed to the destination buffer excluding
+ * trailing '\0' is returned.
+ */
 int string_unescape(char *src, char *dst, size_t size, unsigned int flags)
 {
char *out = dst;
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 10/10] staging: rtl8192u: use %*pEn to escape buffer

2014-07-07 Thread Andy Shevchenko
Let's use kernel's native specifier to escape a buffer.

Signed-off-by: Andy Shevchenko 
---
 drivers/staging/rtl8192u/ieee80211/ieee80211.h | 14 +-
 1 file changed, 1 insertion(+), 13 deletions(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211.h 
b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
index 1040bab..1a265f9 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211.h
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211.h
@@ -2576,25 +2576,13 @@ static inline int ieee80211_get_scans(struct 
ieee80211_device *ieee)
 
 static inline const char *escape_essid(const char *essid, u8 essid_len) {
static char escaped[IW_ESSID_MAX_SIZE * 2 + 1];
-   const char *s = essid;
-   char *d = escaped;
 
if (ieee80211_is_empty_essid(essid, essid_len)) {
memcpy(escaped, "", sizeof(""));
return escaped;
}
 
-   essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE);
-   while (essid_len--) {
-   if (*s == '\0') {
-   *d++ = '\\';
-   *d++ = '0';
-   s++;
-   } else {
-   *d++ = *s++;
-   }
-   }
-   *d = '\0';
+   snprintf(escaped, sizeof(escaped), "%*pEn", essid_len, essid);
return escaped;
 }
 
-- 
2.0.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: nvec: add missing blank line after declarations

2014-07-07 Thread Pawel Lebioda
Fix 'missing blank line after declaration' warnings reported by checkpatch.pl.
Signed-off-by: Pawel Lebioda 
---
 drivers/staging/nvec/nvec_paz00.c | 1 +
 drivers/staging/nvec/nvec_power.c | 1 +
 drivers/staging/nvec/nvec_ps2.c   | 2 ++
 3 files changed, 4 insertions(+)

diff --git a/drivers/staging/nvec/nvec_paz00.c 
b/drivers/staging/nvec/nvec_paz00.c
index 934b796..e2e675a 100644
--- a/drivers/staging/nvec/nvec_paz00.c
+++ b/drivers/staging/nvec/nvec_paz00.c
@@ -35,6 +35,7 @@ static void nvec_led_brightness_set(struct led_classdev 
*led_cdev,
 {
struct nvec_led *led = to_nvec_led(led_cdev);
unsigned char buf[] = NVEC_LED_REQ;
+
buf[4] = value;
 
nvec_write_async(led->nvec, buf, sizeof(buf));
diff --git a/drivers/staging/nvec/nvec_power.c 
b/drivers/staging/nvec/nvec_power.c
index aacfcd6..6446e15 100644
--- a/drivers/staging/nvec/nvec_power.c
+++ b/drivers/staging/nvec/nvec_power.c
@@ -226,6 +226,7 @@ static int nvec_power_get_property(struct power_supply *psy,
   union power_supply_propval *val)
 {
struct nvec_power *power = dev_get_drvdata(psy->dev->parent);
+
switch (psp) {
case POWER_SUPPLY_PROP_ONLINE:
val->intval = power->on;
diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
index 45b2f13..f56f1db 100644
--- a/drivers/staging/nvec/nvec_ps2.c
+++ b/drivers/staging/nvec/nvec_ps2.c
@@ -53,12 +53,14 @@ static struct nvec_ps2 ps2_dev;
 static int ps2_startstreaming(struct serio *ser_dev)
 {
unsigned char buf[] = { NVEC_PS2, AUTO_RECEIVE_N, PACKET_SIZE };
+
return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }
 
 static void ps2_stopstreaming(struct serio *ser_dev)
 {
unsigned char buf[] = { NVEC_PS2, CANCEL_AUTO_RECEIVE };
+
nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }
 
-- 
1.8.3.2

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: iio: remove duplicate case labels

2014-07-07 Thread Jonathan Cameron

On 07/07/14 15:12, Daniel Baluta wrote:

Otherwise, compiling iio_event_monitor program fails:

io_event_monitor.c: In function ‘event_is_known’:
iio_event_monitor.c:125:2: error: duplicate case value
   case IIO_MOD_LIGHT_BOTH:
   ^
iio_event_monitor.c:121:2: error: previously used here
   case IIO_MOD_LIGHT_BOTH:

Fixes: da4db94 (iio staging: add recently added modifiers to iio_event_monitor)
Signed-off-by: Daniel Baluta 

Applied to the togreg branch of iio.git.  It's a fix to example code so
probably not worth pushing out any faster.

Thanks,

Jonathan

---
  drivers/staging/iio/Documentation/iio_event_monitor.c | 2 --
  1 file changed, 2 deletions(-)

diff --git a/drivers/staging/iio/Documentation/iio_event_monitor.c 
b/drivers/staging/iio/Documentation/iio_event_monitor.c
index cb35a97..569d6f8 100644
--- a/drivers/staging/iio/Documentation/iio_event_monitor.c
+++ b/drivers/staging/iio/Documentation/iio_event_monitor.c
@@ -122,8 +122,6 @@ static bool event_is_known(struct iio_event_data *event)
case IIO_MOD_LIGHT_IR:
case IIO_MOD_ROOT_SUM_SQUARED_X_Y:
case IIO_MOD_SUM_SQUARED_X_Y_Z:
-   case IIO_MOD_LIGHT_BOTH:
-   case IIO_MOD_LIGHT_IR:
case IIO_MOD_LIGHT_CLEAR:
case IIO_MOD_LIGHT_RED:
case IIO_MOD_LIGHT_GREEN:



___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH] staging: iio: Introduce the use of devm_ioremap_resource

2014-07-07 Thread Jonathan Cameron

On 07/07/14 13:36, Lars-Peter Clausen wrote:

On 07/07/2014 02:36 PM, Jonathan Cameron wrote:

On 01/07/14 19:44, Himangi Saraogi wrote:

This patch introduces the use of devm_ioremap_resource. It does away
with call to request_mem_region and the error checking on
platform_get_resource. Also, the calls to free the allocated resources
like release_mem_region and iounmap are done away with. The ret variable
in the probe function is also eliminated. Also, a bug is fixed as the
goto in the error handling of request_mem_region should not have
called release_mem_region which releases a resource that has not been
allocated.

Signed-off-by: Himangi Saraogi 
Acked-by: Julia Lawall 

Again, looks superficially fine, but I'd like an ack from someone
at Analog ideally.
Cc'd Lars


Acked-by: Lars-Peter Clausen 

Applied to the togreg branch of iio.git.  This will be initially
pushed out as testing for the autobuilders to play.

Thanks,

Jonathan

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2] iio:trigger: Introduce the use of devm_kzalloc

2014-07-07 Thread Jonathan Cameron

On 07/07/14 13:37, Lars-Peter Clausen wrote:

On 07/07/2014 02:34 PM, Jonathan Cameron wrote:

On 01/07/14 22:19, Himangi Saraogi wrote:

This patch introduces the use of the managed version of kzalloc and
removes the kfrees in the probe and remove functions. More return
paths are added and the labels are renamed to order them.

Signed-off-by: Himangi Saraogi 

Looks sane, but I'd like an ack or reviewed-by from someone as Analog for
this one.
cc'd Lars and Michael.


Acked-by: Lars-Peter Clausen 

Applied to the togreg branch of iio.git

Thanks,

Jonathan


Thanks.

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2 04/10] lib/vsprintf: add %*pE[achnops] format specifier

2014-07-07 Thread Joe Perches
[trivial notes]

On Mon, 2014-07-07 at 18:21 +0300, Andy Shevchenko wrote:
> This allows user to print a given buffer as esaped string. The rules applied

as an escaped

> accordingly to the mix of the flags provided by additional format letters.

rules are applied according to an optional mix of flags

> For example, if the given buffer:
> 
>   1b 62 20 5c 43 07 22 90 0d 5d
> 
> The result strings could be:

would be

>   %*pE"\eb \C\a"\220\r]"

Maybe say something about ssid's here.
or maybe add an %*pES just for the ssid type.

> diff --git a/Documentation/printk-formats.txt 
> b/Documentation/printk-formats.txt
[]
> @@ -70,6 +70,34 @@ DMA addresses types dma_addr_t:
>   For printing a dma_addr_t type which can vary based on build options,
>   regardless of the width of the CPU data path. Passed by reference.
>  
> +Raw buffer as an escaped string:
> +
> + %*pE[achnops]
> +
> + For printing raw buffer as an escaped string. For the following buffer
> +
> + 1b 62 20 5c 43 07 22 90 0d 5d
> +
> + few examples show how the conversion could be done (the result string
> + without embraced quotes):

'embraced' is a bit of an awkward word choice.  Maybe surrounding.

> +
> + %*pE"\eb \C\a"\220\r]"

Oh, the initial commit log comments above are really for this block

> + %*pEhp  "\x1bb \C\x07"\x90\x0d]"
> + %*pEa   "\e\142\040\\\103\a\042\220\r\135"
> +
> + The converion rules are defined by combination of the following flags

conversion

> + (see string_escape_mem() kernel documentation for the details):
> + a - ESCAPE_ANY
> + c - ESCAPE_SPECIAL
> + h - ESCAPE_HEX
> + n - ESCAPE_NULL
> + o - ESCAPE_OCTAL
> + p - ESCAPE_NP
> + s - ESCAPE_SPACE
> + By default ESCAPE_ANY_NP is used.
> +
> + If field width is ommited the 1 byte only will be escaped.

omitted


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: Anybody working on gdm72xx?

2014-07-07 Thread Michalis Pappas
On 07/01/2014 09:17 PM, Michalis Pappas wrote:
> The wimax.h interface specifies communication through "message pipes", a
> means of free-form communication between user-space and the driver. So
> my understanding is that the library only needs to replace the lowest
> layer (ie ioctl/netlink) with the specified protocol over generic
> netlink. The interface of the immediately upper layer should be
> completely unaffected.
> 
> On the driver side, there is probably a bit more work to be done if we
> are to support all operations (rfkill etc), but if it turns out to be
> too much we can always drop them, as supporting these operations is
> optional and it certainly does not affect your code.
> 
> Anyway, this is only my current understanding. I'll have a more detailed
> look at all this and get back to you soon.
> 

Hi Ben,

just wanted to verify that the wimax stack does not require any
additional work on the userspace part, other than switching to generic
netlink. Control messages are passed to the driver verbatim.

I need to do some more reading on the wimax stack source, as there are
things related to the state machine I need to understand better, but in
any case I feel like replacing the obsolete communication layer to
generic netlink is the right thing to do.

Let me know if you think of this approach. We can always post a question
to linux-wireless if there is any doubt on that.

Best Regards,

Michalis

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/5] staging:iio:hmc5843: Added regmap support

2014-07-07 Thread Jonathan Cameron

On 02/07/14 14:50, Josef Gajdusek wrote:

This patch changes hmc5843.c to use regmap. This provides transparent caching
to the code as well as abstraction necessary to add support for SPI-based
hmc5983.

Signed-off-by: Josef Gajdusek 

Hi Josef,

A few little bits and pieces inline.
Peter, could you also take a look at this series?

Thanks,

Jonathan

---
  drivers/staging/iio/magnetometer/Kconfig   |   1 +
  drivers/staging/iio/magnetometer/hmc5843.c | 145 +++--
  2 files changed, 98 insertions(+), 48 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 34634da..ad88d61 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -8,6 +8,7 @@ config SENSORS_HMC5843
depends on I2C
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
+   select REGMAP_I2C
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c 
b/drivers/staging/iio/magnetometer/hmc5843.c
index d4f4dd9..cc12308 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -21,6 +21,7 @@

  #include 
  #include 
+#include 
  #include 
  #include 
  #include 
@@ -34,6 +35,7 @@
  #define HMC5843_DATA_OUT_MSB_REGS 0x03
  #define HMC5843_STATUS_REG0x09
  #define HMC5843_ID_REG0x0a
+#define HMC5843_ID_END 0x0c

  enum hmc5843_ids {
HMC5843_ID,
@@ -49,6 +51,7 @@ enum hmc5843_ids {
  #define HMC5843_RANGE_GAIN_OFFSET 0x05
  #define HMC5843_RANGE_GAIN_DEFAULT0x01
  #define HMC5843_RANGE_GAINS   8
+#define HMC5843_RANGE_GAIN_MASK0xe0

  /* Device status */
  #define HMC5843_DATA_READY0x01
@@ -68,6 +71,7 @@ enum hmc5843_ids {
  #define HMC5843_RATE_OFFSET   0x02
  #define HMC5843_RATE_DEFAULT  0x04
  #define HMC5843_RATES 7
+#define HMC5843_RATE_MASK  0x1c

  /* Device measurement configuration */
  #define HMC5843_MEAS_CONF_NORMAL  0x00
@@ -121,10 +125,7 @@ struct hmc5843_chip_info {
  struct hmc5843_data {
struct i2c_client *client;
struct mutex lock;
-   u8 rate;
-   u8 meas_conf;
-   u8 operating_mode;
-   u8 range;
+   struct regmap *regmap;
const struct hmc5843_chip_info *variant;
__be16 buffer[8]; /* 3x 16-bit channels + padding + 64-bit timestamp */
  };
@@ -135,10 +136,8 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 
operating_mode)
int ret;

mutex_lock(&data->lock);
-   ret = i2c_smbus_write_byte_data(data->client, HMC5843_MODE_REG,
-   operating_mode & HMC5843_MODE_MASK);
-   if (ret >= 0)
-   data->operating_mode = operating_mode;
+   ret = regmap_update_bits(data->regmap, HMC5843_MODE_REG,
+   HMC5843_MODE_MASK, operating_mode);

Whilst minor, we do have a slight change in how this works in the event
of an error.  I don't particularly mind it, but perhaps should have
been broken out for separate discussion.


mutex_unlock(&data->lock);

return ret;
@@ -146,15 +145,15 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 
operating_mode)

  static int hmc5843_wait_measurement(struct hmc5843_data *data)
  {
-   s32 result;
int tries = 150;
+   int val;
+   int ret;

while (tries-- > 0) {
-   result = i2c_smbus_read_byte_data(data->client,
-   HMC5843_STATUS_REG);
-   if (result < 0)
-   return result;
-   if (result & HMC5843_DATA_READY)
+   ret = regmap_read(data->regmap, HMC5843_STATUS_REG, &val);
+   if (ret < 0)
+   return ret;
+   if (val & HMC5843_DATA_READY)
break;
msleep(20);
}
@@ -171,20 +170,20 @@ static int hmc5843_wait_measurement(struct hmc5843_data 
*data)
  static int hmc5843_read_measurement(struct hmc5843_data *data,
int idx, int *val)
  {
-   s32 result;
__be16 values[3];
+   int ret;

mutex_lock(&data->lock);
-   result = hmc5843_wait_measurement(data);
-   if (result < 0) {
+   ret = hmc5843_wait_measurement(data);
+   if (ret < 0) {
mutex_unlock(&data->lock);
-   return result;
+   return ret;
}
-   result = i2c_smbus_read_i2c_block_data(data->client,
-   HMC5843_DATA_OUT_MSB_REGS, sizeof(values), (u8 *) values);
+   ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS,
+   va

Re: [PATCH 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files

2014-07-07 Thread Jonathan Cameron

On 02/07/14 14:51, Josef Gajdusek wrote:

This patch splits hmc5843.c to multiple files - the interface-agnostic
hmc5843_core.c, i2c specific hmc5843_i2c.c and header file hmc5843.h. This is
another step to add support of SPI-enabled hmc5983.

Signed-off-by: Josef Gajdusek 

Looks good to me from a relatively quick scan through...


---
  drivers/staging/iio/magnetometer/Kconfig|  16 +-
  drivers/staging/iio/magnetometer/Makefile   |   3 +-
  drivers/staging/iio/magnetometer/hmc5843.c  | 701 
  drivers/staging/iio/magnetometer/hmc5843.h  |  75 +++
  drivers/staging/iio/magnetometer/hmc5843_core.c | 598 
  drivers/staging/iio/magnetometer/hmc5843_i2c.c  | 106 
  6 files changed, 793 insertions(+), 706 deletions(-)
  delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c
  create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h
  create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c
  create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index ad88d61..28c2612 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -5,15 +5,23 @@ menu "Magnetometer sensors"

  config SENSORS_HMC5843
tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer"
-   depends on I2C
+   depends on (I2C || SPI_MASTER)
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
-   select REGMAP_I2C
+   select SENSORS_HMC5843_I2C if (I2C)
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).

- To compile this driver as a module, choose M here: the module
- will be called hmc5843.
+ This driver can also be compiled as a set of modules.
+ If so, these modules will be created:
+ - hmc5843_core (core functions)
+ - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+
+config SENSORS_HMC5843_I2C
+   tristate
+   depends on I2C
+   depends on SENSORS_HMC5843
+   select REGMAP_I2C

  endmenu
diff --git a/drivers/staging/iio/magnetometer/Makefile 
b/drivers/staging/iio/magnetometer/Makefile
index f9bfb2e..65baf1c 100644
--- a/drivers/staging/iio/magnetometer/Makefile
+++ b/drivers/staging/iio/magnetometer/Makefile
@@ -2,4 +2,5 @@
  # Makefile for industrial I/O Magnetometer sensors
  #

-obj-$(CONFIG_SENSORS_HMC5843)  += hmc5843.o
+obj-$(CONFIG_SENSORS_HMC5843)  += hmc5843_core.o
+obj-$(CONFIG_SENSORS_HMC5843_I2C)  += hmc5843_i2c.o
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c 
b/drivers/staging/iio/magnetometer/hmc5843.c
deleted file mode 100644
index cc12308..000
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/*  Copyright (C) 2010 Texas Instruments
-Author: Shubhrajyoti Datta 
-Acknowledgement: Jonathan Cameron  for valuable inputs.
-
-Support for HMC5883 and HMC5883L by Peter Meerwald .
-
-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.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define HMC5843_CONFIG_REG_A   0x00
-#define HMC5843_CONFIG_REG_B   0x01
-#define HMC5843_MODE_REG   0x02
-#define HMC5843_DATA_OUT_MSB_REGS  0x03
-#define HMC5843_STATUS_REG 0x09
-#define HMC5843_ID_REG 0x0a
-#define HMC5843_ID_END 0x0c
-
-enum hmc5843_ids {
-   HMC5843_ID,
-   HMC5883_ID,
-   HMC5883L_ID,
-};
-
-/*
- * Range gain settings in (+-)Ga
- * Beware: HMC5843 and HMC5883 have different recommended sensor field
- * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively
- */
-#define HMC5843_RANGE_GAIN_OFFSET  0x05
-#define HMC5843_RANGE_GAIN_DEFAULT 0x01
-#define HMC5843_RANGE_GAINS8
-#define HMC5843_RANGE_GAIN_MASK0xe0
-
-/* Device status */
-#define HMC5843_DATA_READY 0x01
-#define HMC5843_DATA_OUTPUT_LOCK   0x02
-
-/* Mode register configuration */
-#define HMC5843_MODE_CONVERSION_C

Re: [PATCH 3/5] staging:iio:hmc5843: register <-> value arrays now can have different lengths

2014-07-07 Thread Jonathan Cameron

On 02/07/14 14:52, Josef Gajdusek wrote:

Changed structure of struct hmc5843_chip_info to include length of translation
arrays. Code previously using #defined constant has been changed accordingly.
This allows to integrate devices which do have different amounts of available
rates/scales.

Signed-off-by: Josef Gajdusek 

This is fine as well.

J

---
  drivers/staging/iio/magnetometer/hmc5843_core.c | 34 +
  1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c 
b/drivers/staging/iio/magnetometer/hmc5843_core.c
index 4ad309b..b26ac9f 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_core.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_core.c
@@ -39,7 +39,6 @@
   */
  #define HMC5843_RANGE_GAIN_OFFSET 0x05
  #define HMC5843_RANGE_GAIN_DEFAULT0x01
-#define HMC5843_RANGE_GAINS8
  #define HMC5843_RANGE_GAIN_MASK   0xe0

  /* Device status */
@@ -59,7 +58,6 @@
   */
  #define HMC5843_RATE_OFFSET   0x02
  #define HMC5843_RATE_DEFAULT  0x04
-#define HMC5843_RATES  7
  #define HMC5843_RATE_MASK 0x1c

  /* Device measurement configuration */
@@ -69,15 +67,15 @@
  #define HMC5843_MEAS_CONF_MASK0x03

  /* Scaling factors: 1000/Gain */
-static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5843_regval_to_nanoscale[] = {
6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714
  };

-static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883_regval_to_nanoscale[] = {
7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662
  };

-static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883l_regval_to_nanoscale[] = {
7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478
  };

@@ -94,11 +92,11 @@ static const int 
hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
   * 6  | 50| 75
   * 7  | Not used  | Not used
   */
-static const int hmc5843_regval_to_samp_freq[7][2] = {
+static const int hmc5843_regval_to_samp_freq[][2] = {
{0, 50}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0}
  };

-static const int hmc5883_regval_to_samp_freq[7][2] = {
+static const int hmc5883_regval_to_samp_freq[][2] = {
{0, 75}, {1, 50}, {3, 0}, {7, 50}, {15, 0}, {30, 0},
{75, 0}
  };
@@ -107,7 +105,9 @@ static const int hmc5883_regval_to_samp_freq[7][2] = {
  struct hmc5843_chip_info {
const struct iio_chan_spec *channels;
const int (*regval_to_samp_freq)[2];
+   const int n_regval_to_samp_freq;
const int *regval_to_nanoscale;
+   const int n_regval_to_nanoscale;
  };

  /* The lower two bits contain the current conversion mode */
@@ -248,7 +248,7 @@ static ssize_t hmc5843_show_samp_freq_avail(struct device 
*dev,
size_t len = 0;
int i;

-   for (i = 0; i < HMC5843_RATES; i++)
+   for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
len += scnprintf(buf + len, PAGE_SIZE - len,
"%d.%d ", data->variant->regval_to_samp_freq[i][0],
data->variant->regval_to_samp_freq[i][1]);
@@ -278,7 +278,7 @@ static int hmc5843_get_samp_freq_index(struct hmc5843_data 
*data,
  {
int i;

-   for (i = 0; i < HMC5843_RATES; i++)
+   for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
if (val == data->variant->regval_to_samp_freq[i][0] &&
val2 == data->variant->regval_to_samp_freq[i][1])
return i;
@@ -307,7 +307,7 @@ static ssize_t hmc5843_show_scale_avail(struct device *dev,
size_t len = 0;
int i;

-   for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+   for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
len += scnprintf(buf + len, PAGE_SIZE - len,
"0.%09d ", data->variant->regval_to_nanoscale[i]);

@@ -327,7 +327,7 @@ static int hmc5843_get_scale_index(struct hmc5843_data 
*data, int val, int val2)
if (val != 0)
return -EINVAL;

-   for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+   for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
if (val2 == data->variant->regval_to_nanoscale[i])
return i;

@@ -480,17 +480,29 @@ static const struct hmc5843_chip_info 
hmc5843_chip_info_tbl[] = {
[HMC5843_ID] = {
.channels = hmc5843_channels,
.regval_to_samp_freq = hmc5843_regval_to_samp_freq,
+   .n_regval_to_samp_freq =
+   ARRAY_SIZE(hmc5843_regval_to_samp_freq),
.regval_to_nanoscale = hmc5843_regval_to_nanoscale,
+   .n_regval_to_nanoscale =
+   A

Re: [PATCH 4/5] staging:iio:hmc5843: Add support for i2c hmc5983

2014-07-07 Thread Jonathan Cameron

On 02/07/14 14:53, Josef Gajdusek wrote:

This patch adds support for the hmc5983 i2c interface.
This chip is almost identical to the hmc5883. The difference being added
temperature compensation, additional available sample rate (220Hz) and an SPI
interface.

Signed-off-by: Josef Gajdusek 

Very nice.

J

---
  drivers/staging/iio/magnetometer/Kconfig|  2 +-
  drivers/staging/iio/magnetometer/hmc5843.h  |  1 +
  drivers/staging/iio/magnetometer/hmc5843_core.c | 20 +---
  drivers/staging/iio/magnetometer/hmc5843_i2c.c  |  5 +++--
  4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 28c2612..32c69c0 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -16,7 +16,7 @@ config SENSORS_HMC5843
  This driver can also be compiled as a set of modules.
  If so, these modules will be created:
  - hmc5843_core (core functions)
- - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+ - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)

  config SENSORS_HMC5843_I2C
tristate
diff --git a/drivers/staging/iio/magnetometer/hmc5843.h 
b/drivers/staging/iio/magnetometer/hmc5843.h
index 4e3cce3..c36041a 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.h
+++ b/drivers/staging/iio/magnetometer/hmc5843.h
@@ -29,6 +29,7 @@ enum hmc5843_ids {
HMC5843_ID,
HMC5883_ID,
HMC5883L_ID,
+   HMC5983_ID,
  };

  struct hmc5843_data {
diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c 
b/drivers/staging/iio/magnetometer/hmc5843_core.c
index b26ac9f..21f8efd 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_core.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_core.c
@@ -101,6 +101,11 @@ static const int hmc5883_regval_to_samp_freq[][2] = {
{75, 0}
  };

+static const int hmc5983_regval_to_samp_freq[][2] = {
+   {0, 75}, {1, 50}, {3, 0}, {7, 50}, {15, 0}, {30, 0},
+   {75, 0}, {220, 0}
+};
+
  /* Describe chip variants */
  struct hmc5843_chip_info {
const struct iio_chan_spec *channels;
@@ -457,7 +462,7 @@ static const struct iio_chan_spec hmc5843_channels[] = {
IIO_CHAN_SOFT_TIMESTAMP(3),
  };

-/* Beware: Y and Z are exchanged on HMC5883 */
+/* Beware: Y and Z are exchanged on HMC5883 and 5983 */
  static const struct iio_chan_spec hmc5883_channels[] = {
HMC5843_CHANNEL(X, 0),
HMC5843_CHANNEL(Z, 1),
@@ -504,6 +509,15 @@ static const struct hmc5843_chip_info 
hmc5843_chip_info_tbl[] = {
.n_regval_to_nanoscale =
ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
},
+   [HMC5983_ID] = {
+   .channels = hmc5883_channels,
+   .regval_to_samp_freq = hmc5983_regval_to_samp_freq,
+   .n_regval_to_samp_freq =
+   ARRAY_SIZE(hmc5983_regval_to_samp_freq),
+   .regval_to_nanoscale = hmc5883l_regval_to_nanoscale,
+   .n_regval_to_nanoscale =
+   ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
+   }
  };

  static int hmc5843_init(struct hmc5843_data *data)
@@ -516,7 +530,7 @@ static int hmc5843_init(struct hmc5843_data *data)
if (ret < 0)
return ret;
if (id[0] != 'H' || id[1] != '4' || id[2] != '3') {
-   dev_err(data->dev, "no HMC5843/5883/5883L sensor\n");
+   dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n");
return -ENODEV;
}

@@ -606,5 +620,5 @@ int hmc5843_common_remove(struct iio_dev *indio_dev)
  EXPORT_SYMBOL(hmc5843_common_remove);

  MODULE_AUTHOR("Shubhrajyoti Datta ");
-MODULE_DESCRIPTION("HMC5843/5883/5883L core driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 core driver");
  MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/magnetometer/hmc5843_i2c.c 
b/drivers/staging/iio/magnetometer/hmc5843_i2c.c
index b3c92d9..753c914 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_i2c.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_i2c.c
@@ -1,5 +1,5 @@
  /*
- * i2c driver for hmc5843/5843/5883/5883l
+ * i2c driver for hmc5843/5843/5883/5883l/5983
   *
   * Split from hmc5843.c
   * Copyright (C) Josef Gajdusek 
@@ -79,6 +79,7 @@ static const struct i2c_device_id hmc5843_id[] = {
{ "hmc5843", HMC5843_ID },
{ "hmc5883", HMC5883_ID },
{ "hmc5883l", HMC5883L_ID },
+   { "hmc5983", HMC5983_ID },
{ }
  };
  MODULE_DEVICE_TABLE(i2c, hmc5843_id);
@@ -102,5 +103,5 @@ static struct i2c_driver hmc5843_driver = {
  module_i2c_driver(hmc5843_driver);

  MODULE_AUTHOR("Josef Gajdusek ");
-MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 i2c driver");
  MODULE_LICENSE("GPL");



___
devel mailing list
de...@linuxdriver

Re: [PATCH 5/5] staging:iio:hmc5843: Add support for spi hmc5983

2014-07-07 Thread Jonathan Cameron

On 02/07/14 14:54, Josef Gajdusek wrote:

This patch adds support for the hmc5983 spi interface.
This chip is almost identical to the hmc5883. The difference being added
temperature compensation, additional available sample rate (220Hz) and an SPI
interface.

Signed-off-by: Josef Gajdusek 

Sometimes I like how nicely regmap makes this stuff come together.
So the series all looks good to me except for the few little
bits in patch 1.

J

---
  drivers/staging/iio/magnetometer/Kconfig   |   8 ++
  drivers/staging/iio/magnetometer/Makefile  |   1 +
  drivers/staging/iio/magnetometer/hmc5843_spi.c | 105 +
  3 files changed, 114 insertions(+)
  create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 32c69c0..bc5c355 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -9,6 +9,7 @@ config SENSORS_HMC5843
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select SENSORS_HMC5843_I2C if (I2C)
+   select SENSORS_HMC5843_SPI if (SPI_MASTER)
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).
@@ -17,6 +18,7 @@ config SENSORS_HMC5843
  If so, these modules will be created:
  - hmc5843_core (core functions)
  - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
+ - hmc5843_spi (support for HMC5983)

  config SENSORS_HMC5843_I2C
tristate
@@ -24,4 +26,10 @@ config SENSORS_HMC5843_I2C
depends on SENSORS_HMC5843
select REGMAP_I2C

+config SENSORS_HMC5843_SPI
+   tristate
+   depends on SPI_MASTER
+   depends on SENSORS_HMC5843
+   select REGMAP_SPI
+
  endmenu
diff --git a/drivers/staging/iio/magnetometer/Makefile 
b/drivers/staging/iio/magnetometer/Makefile
index 65baf1c..33761a1 100644
--- a/drivers/staging/iio/magnetometer/Makefile
+++ b/drivers/staging/iio/magnetometer/Makefile
@@ -4,3 +4,4 @@

  obj-$(CONFIG_SENSORS_HMC5843) += hmc5843_core.o
  obj-$(CONFIG_SENSORS_HMC5843_I2C) += hmc5843_i2c.o
+obj-$(CONFIG_SENSORS_HMC5843_SPI)  += hmc5843_spi.o
diff --git a/drivers/staging/iio/magnetometer/hmc5843_spi.c 
b/drivers/staging/iio/magnetometer/hmc5843_spi.c
new file mode 100644
index 000..3f71ee0
--- /dev/null
+++ b/drivers/staging/iio/magnetometer/hmc5843_spi.c
@@ -0,0 +1,105 @@
+/*
+ * SPI driver for hmc5983
+ *
+ * Copyright (C) Josef Gajdusek 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * */
+
+#include 
+#include 
+#include 
+
+#include "hmc5843.h"
+
+struct regmap_config hmc5843_spi_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+
+   .rd_table = &hmc5843_readable_table,
+   .wr_table = &hmc5843_writable_table,
+   .volatile_table = &hmc5843_volatile_table,
+
+   /* Autoincrement address pointer */
+   .read_flag_mask = 0xc0,
+
+   .cache_type = REGCACHE_RBTREE,
+};
+
+static int hmc5843_spi_probe(struct spi_device *spi)
+{
+   struct hmc5843_data *data;
+   struct iio_dev *indio_dev;
+   int ret;
+
+   indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data));
+   if (indio_dev == NULL)
+   return -ENOMEM;
+
+   spi->mode = SPI_MODE_3;
+   spi->max_speed_hz = 800;
+   spi->bits_per_word = 8;
+   ret = spi_setup(spi);
+   if (ret)
+   return ret;
+
+   spi_set_drvdata(spi, indio_dev);
+
+   data = iio_priv(indio_dev);
+   data->dev = &spi->dev;
+   data->regmap = devm_regmap_init_spi(spi, &hmc5843_spi_regmap_config);
+
+   indio_dev->dev.parent = &spi->dev;
+
+   return hmc5843_common_probe(indio_dev, HMC5983_ID);
+}
+
+static int hmc5843_spi_remove(struct spi_device *spi)
+{
+   struct iio_dev *indio_dev = spi_get_drvdata(spi);
+   return hmc5843_common_remove(indio_dev);
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int hmc5843_spi_suspend(struct device *dev)
+{
+   return hmc5843_common_suspend(spi_get_drvdata(to_spi_device(dev)));
+}
+
+static int hmc5843_spi_resume(struct device *dev)
+{
+   return hmc5843_common_resume(spi_get_drvdata(to_spi_device(dev)));
+}
+
+static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops,
+   hmc5843_spi_suspend, hmc5843_spi_resume);
+#define HMC5843_PM_OPS (&hmc5843_pm_ops)
+#else
+#define HMC5843_PM_OPS NULL
+#endif
+
+
+static const struct spi_device_id hmc5843_id[] = {
+   { "hmc5983", HMC5983_ID },
+   { }
+};
+
+static struct spi_driver hmc5843_driver = {
+   .driver = {
+   .name = "hmc5843",
+   .pm = HMC5843_PM_OPS,
+   

RE: [BISECTED][REGRESSION] Loading Hyper-V network drivers is racy in 3.14+ on Hyper-V 2012 R2

2014-07-07 Thread Haiyang Zhang


> -Original Message-
> From: Sitsofe Wheeler [mailto:sits...@gmail.com]
> Sent: Sunday, July 6, 2014 4:18 PM
> To: Haiyang Zhang
> Cc: KY Srinivasan; David S. Miller; de...@linuxdriverproject.org; linux-
> ker...@vger.kernel.org; net...@vger.kernel.org
> Subject: [BISECTED][REGRESSION] Loading Hyper-V network drivers is racy in
> 3.14+ on Hyper-V 2012 R2
> 
> With the 3.14 kernel Hyper-V no longer reliably enables its networking devices
> in time on cloud images leading to network devices permanently remaining
> offline.
> 
> After a painful round of bisection I've narrowed this down to commit
> b679ef73edc251f6d200a7dd2396e9fef9e36fc3 :
> 
> # bad: [455c6fdbd219161bd09b1165f11699d6d73de11c] Linux 3.14 # good:
> [d8ec26d7f8287f5788a494f56e8814210f0e64be] Linux 3.13 git bisect start
> 'v3.14' 'v3.13'
> # good: [82c477669a4665eb4e52030792051e0559ee2a36] Merge branch 'perf-
> urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> git bisect good 82c477669a4665eb4e52030792051e0559ee2a36
> # bad: [ca2a650f3dfdc30d71d21bcbb04d2d057779f3f9] Merge branch 'for-
> linus' of git://git.infradead.org/users/vkoul/slave-dma
> git bisect bad ca2a650f3dfdc30d71d21bcbb04d2d057779f3f9
> # bad: [205e2210daa975d92ace485a65a31ccc4077fe1a] iwlwifi: disable TX
> AMPDU by default for iwldvm git bisect bad
> 205e2210daa975d92ace485a65a31ccc4077fe1a
> # bad: [09db30805300e9ed5ad43d4d339115cf1d9c84e1] dccp: re-enable debug
> macro git bisect bad 09db30805300e9ed5ad43d4d339115cf1d9c84e1
> # bad: [d9120198ddef2c0b61ca6659ace41b7c1e7c8f08] clk: shmobile: rcar-
> gen2: Use kick bit to allow Z clock frequency change git bisect bad
> d9120198ddef2c0b61ca6659ace41b7c1e7c8f08
> # bad: [1b07da516ee25250f458c76c012ebe4cd677a84f] hyperv: Move state
> setting for link query git bisect bad
> 1b07da516ee25250f458c76c012ebe4cd677a84f
> # bad: [53611c0ce9f6e2fa2e31f9ab4ad8c08c512085ba] Merge
> git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
> git bisect bad 53611c0ce9f6e2fa2e31f9ab4ad8c08c512085ba
> # bad: [a34fe10750ebe524a39f97bd78ab4d232a554edb] parisc: locks: remove
> redundant arch_*_relax operations git bisect bad
> a34fe10750ebe524a39f97bd78ab4d232a554edb
> # bad: [004e5cf743086990e5fc04a14437b3966d7fa9a2] Merge branch 'exynos-
> drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos
> into drm-fixes git bisect bad 004e5cf743086990e5fc04a14437b3966d7fa9a2
> # bad: [a4ecdf82f8ea49f7d3a072121dcbd0bf3a7cb93a] Merge branch 'x86-
> urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
> git bisect bad a4ecdf82f8ea49f7d3a072121dcbd0bf3a7cb93a
> # bad: [c60f7d5a8e7c639de5d9dfe07e1e91d302d506e4] Merge branch 'drm-
> fixes' of git://people.freedesktop.org/~airlied/linux
> git bisect bad c60f7d5a8e7c639de5d9dfe07e1e91d302d506e4
> # bad: [bf21d605bf7d18d2b3cdb1c19fc1b2a1549c1f11] Merge branch 'drm-
> fixes-3.14' of git://people.freedesktop.org/~agd5f/linux into drm-fixes git 
> bisect
> bad bf21d605bf7d18d2b3cdb1c19fc1b2a1549c1f11
> # bad: [07ae78c9798b79bad3d3adf983c94ba23fde54d4] drm/radeon/cik: stop
> the sdma engines in the enable() function git bisect bad
> 07ae78c9798b79bad3d3adf983c94ba23fde54d4
> # bad: [7848865914c6a63ead674f0f5604b77df7d3874f] drm/radeon: fix runpm
> disabling on non-PX harder git bisect bad
> 7848865914c6a63ead674f0f5604b77df7d3874f
> # bad: [e9e352e9100b98aed1a5fb9e33355c29fb07d5b1] Merge tag 'for-linus'
> of git://git.kernel.org/pub/scm/linux/kernel/git/olof/chrome-platform
> git bisect bad e9e352e9100b98aed1a5fb9e33355c29fb07d5b1
> # good: [6e1f586d31ad49063da391db12632b31c7b00d76] qlcnic: Fix SR-IOV
> cleanup code path git bisect good
> 6e1f586d31ad49063da391db12632b31c7b00d76
> # good: [562e74fefc36eb57286455c68a60f2776659a7e1] Merge tag 'cris-for-
> 3.14' of git://jni.nu/cris git bisect good
> 562e74fefc36eb57286455c68a60f2776659a7e1
> # good: [f1499382f114231cbd1e3dee7e656b50ce9d8236] Merge tag 'xfs-for-
> linus-v3.14-rc1-2' of git://oss.sgi.com/xfs/xfs git bisect good
> f1499382f114231cbd1e3dee7e656b50ce9d8236
> # good: [0e47c969c65e213421450c31043353ebe3c67e0c] Merge tag 'for-linus-
> 20140127' of git://git.infradead.org/linux-mtd git bisect good
> 0e47c969c65e213421450c31043353ebe3c67e0c
> # bad: [30c867eebfbd1c25310aec9f152578deaf793080] Merge tag 'blackfin-
> for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/realmz6/blackfin-
> linux
> git bisect bad 30c867eebfbd1c25310aec9f152578deaf793080
> # bad: [c044dc2132d19d8c643cdd340f21afcec177c046] qeth: fix build of s390
> allmodconfig git bisect bad c044dc2132d19d8c643cdd340f21afcec177c046
> # bad: [d922e1cb1ea17ac7f0a5c3c2be98d4bd80d055b8] net: Document
> promote_secondaries git bisect bad
> d922e1cb1ea17ac7f0a5c3c2be98d4bd80d055b8
> # good: [f2ebd477f141bc09b10fb8deb612a4d9b8999bba] bonding: restructure
> locking of bond_ab_arp_probe() git bisect good
> f2ebd477f141bc09b10fb8deb612a4d9b8999bba
> # bad: [b679ef73edc251f6d200a7dd2396e9fef9e36fc3] hyperv: Add support for
> phy

Re: [PATCH v2 04/10] lib/vsprintf: add %*pE[achnops] format specifier

2014-07-07 Thread Joe Perches
On Mon, 2014-07-07 at 18:21 +0300, Andy Shevchenko wrote:

> diff --git a/lib/vsprintf.c b/lib/vsprintf.c
[]
>  static noinline_for_stack
> +char *escaped_string(char *buf, char *end, u8 *addr, struct printf_spec spec,
> +  const char *fmt)
[]
> + if (spec.field_width == 0)
> + /* nothing to print */
> + return buf;
[]
> + len = spec.field_width < 0 ? 1 : spec.field_width;

If field_width is not specified, emit a single byte?

Perhaps better if -1 was accepted by string_escape_mem
as a strlen request or just ignored as a 0 length is
above.

fyi: hex_string emits nothing on printk("%ph", buf);


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: staging: rtl8188eu:Remove rtw_zmalloc(), wrapper for kzalloc()

2014-07-07 Thread navin patidar
On Mon, Jul 7, 2014 at 6:16 PM, Dan Carpenter  wrote:
> Hello navin patidar,
>
> The patch fadbe0cd5292: "staging: rtl8188eu:Remove rtw_zmalloc(),
> wrapper for kzalloc()" from Jun 22, 2014, leads to the following
> static checker warning:
>
> drivers/staging/rtl8188eu/core/rtw_cmd.c:1234 rtw_setassocsta_cmd()
> warn: struct type mismatch 'set_stakey_rsp vs set_assocsta_rsp'
>
> drivers/staging/rtl8188eu/core/rtw_cmd.c:1234 rtw_setassocsta_cmd()
> error: not allocating enough data 8 vs 4
>
> drivers/staging/rtl8188eu/core/rtw_cmd.c
>   1216  struct set_stakey_rsp *psetassocsta_rsp = NULL;
>^^
>   1217
>   1218  u8  res = _SUCCESS;
>   1219
>   1220
>   1221  ph2c = kzalloc(sizeof(struct cmd_obj), GFP_KERNEL);
>   1222  if (ph2c == NULL) {
>   1223  res = _FAIL;
>   1224  goto exit;
>   1225  }
>   1226
>   1227  psetassocsta_para = kzalloc(sizeof(struct set_assocsta_parm), 
> GFP_KERNEL);
>   ^
>   1228  if (psetassocsta_para == NULL) {
>   1229  kfree(ph2c);
>   1230  res = _FAIL;
>   1231  goto exit;
>   1232  }
>   1233
>   1234  psetassocsta_rsp = kzalloc(sizeof(struct set_assocsta_rsp), 
> GFP_KERNEL);
>   1235  if (psetassocsta_rsp == NULL) {
>   1236  kfree(ph2c);
>   1237  kfree(psetassocsta_para);
>   1238  return _FAIL;
>   1239  }
>   1240
>   1241  init_h2fwcmd_w_parm_no_rsp(ph2c, psetassocsta_para, 
> _SetAssocSta_CMD_);
>   1242  ph2c->rsp = (u8 *)psetassocsta_rsp;
>   1243  ph2c->rspsz = sizeof(struct set_assocsta_rsp);
> 
> These things should all match but I don't know the code well enough to
> say what the intent was.
>
> The code was buggy before you touched it, but your cleanup fixed it so
> my static checker could parse it.

Hi Dan,

rtw_setassocsta_cmd() is a unused function.
I've submitted a patch  "staging: rtl8188eu: Remove unused function
rtw_setassocsta_cmd()"
 to remove it.

regards,
navin patidar
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [BISECTED][REGRESSION] Loading Hyper-V network drivers is racy in 3.14+ on Hyper-V 2012 R2

2014-07-07 Thread Sitsofe Wheeler
On Mon, Jul 07, 2014 at 04:54:20PM +, Haiyang Zhang wrote:
> 
> > -Original Message-
> > From: Sitsofe Wheeler [mailto:sits...@gmail.com]
> > Sent: Sunday, July 6, 2014 4:18 PM
> > To: Haiyang Zhang
> > Cc: KY Srinivasan; David S. Miller; de...@linuxdriverproject.org; linux-
> > ker...@vger.kernel.org; net...@vger.kernel.org
> > Subject: [BISECTED][REGRESSION] Loading Hyper-V network drivers is racy in
> > 3.14+ on Hyper-V 2012 R2
> > 
> > With the 3.14 kernel Hyper-V no longer reliably enables its
> > networking devices in time on cloud images leading to network
> > devices permanently remaining offline.
> > 

> > the system will usually stop rebooting before 20 passes but the most
> > extreme cases were always less than 100. With a pre
> > b679ef73edc251f6d200a7dd2396e9fef9e36fc3 kernel it did over 390
> > passes before I manually stopped it.
> > 
> > Originally filed on https://bugzilla.redhat.com/show_bug.cgi?id=1095387
> > and then on https://bugzilla.kernel.org/show_bug.cgi?id=78771 but without
> > reply...
> > 
> > Might also be related to
> > http://thread.gmane.org/gmane.linux.kernel/1711873/focus=1733398
> > (Regression in hyperv network driver in 3.14).
> 
> What's the memory size assigned to the Linux guest? And, have you seen
> any related messages in the dmesg log after this issue?

(Feel free to trim my emails when replying - it makes it easier to see
your reply :-)

I've had as little as 256 MBytes and as much as 4 GBytes (non-dynamic)
and still seen the issue.

See https://bugzilla.kernel.org/attachment.cgi?id=142201 for a recent
dmesg (an older dmesg snippet can be seen on the Red Hat bugzilla).

-- 
Sitsofe | http://sucs.org/~sits/
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 03/13] staging: rtl8188eu: Remove unused function efuse_GetCurrentSize()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_efuse.c|9 -
 drivers/staging/rtl8188eu/include/rtw_efuse.h |1 -
 2 files changed, 10 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c 
b/drivers/staging/rtl8188eu/core/rtw_efuse.c
index 82a54b5..0e20d5c 100644
--- a/drivers/staging/rtl8188eu/core/rtw_efuse.c
+++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c
@@ -1042,15 +1042,6 @@ u16 efuse_GetMaxSize(struct adapter *padapter)
return max_size;
 }
 
-u8 efuse_GetCurrentSize(struct adapter *padapter, u16 *size)
-{
-   Efuse_PowerSwitch(padapter, false, true);
-   *size = Efuse_GetCurrentSize(padapter);
-   Efuse_PowerSwitch(padapter, false, false);
-
-   return _SUCCESS;
-}
-
 u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
 {
u16 mapLen = 0;
diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h 
b/drivers/staging/rtl8188eu/include/rtw_efuse.h
index b608b92..6b56501 100644
--- a/drivers/staging/rtl8188eu/include/rtw_efuse.h
+++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h
@@ -99,7 +99,6 @@ struct efuse_hal {
u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
 };
 
-u8 efuse_GetCurrentSize(struct adapter *adapter, u16 *size);
 u16 efuse_GetMaxSize(struct adapter *adapter);
 u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr,
u16 cnts, u8 *data);
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 01/13] staging: rtl8188eu: Remove unused function rtw_change_ifname()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/rtw_ioctl_set.h |1 -
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |   55 -
 2 files changed, 56 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h 
b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h
index 187fe1f..005ec17 100644
--- a/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h
+++ b/drivers/staging/rtl8188eu/include/rtw_ioctl_set.h
@@ -45,6 +45,5 @@ u16 rtw_get_cur_max_rate(struct adapter *adapter);
 int rtw_set_scan_mode(struct adapter *adapter, enum rt_scan_type scan_mode);
 int rtw_set_channel_plan(struct adapter *adapter, u8 channel_plan);
 int rtw_set_country(struct adapter *adapter, const char *country_code);
-int rtw_change_ifname(struct adapter *padapter, const char *ifname);
 
 #endif
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index de0efe2..76eddcd 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -153,61 +153,6 @@ RETURN:
return;
 }
 
-int rtw_change_ifname(struct adapter *padapter, const char *ifname)
-{
-   struct net_device *pnetdev;
-   struct net_device *cur_pnetdev;
-   struct rereg_nd_name_data *rereg_priv;
-   int ret;
-
-   if (!padapter)
-   goto error;
-
-   cur_pnetdev = padapter->pnetdev;
-   rereg_priv = &padapter->rereg_nd_name_priv;
-
-   /* free the old_pnetdev */
-   if (rereg_priv->old_pnetdev) {
-   free_netdev(rereg_priv->old_pnetdev);
-   rereg_priv->old_pnetdev = NULL;
-   }
-
-   if (!rtnl_is_locked())
-   unregister_netdev(cur_pnetdev);
-   else
-   unregister_netdevice(cur_pnetdev);
-
-   rtw_proc_remove_one(cur_pnetdev);
-
-   rereg_priv->old_pnetdev = cur_pnetdev;
-
-   pnetdev = rtw_init_netdev(padapter);
-   if (!pnetdev)  {
-   ret = -1;
-   goto error;
-   }
-
-   SET_NETDEV_DEV(pnetdev, dvobj_to_dev(adapter_to_dvobj(padapter)));
-
-   rtw_init_netdev_name(pnetdev, ifname);
-
-   memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
-
-   if (!rtnl_is_locked())
-   ret = register_netdev(pnetdev);
-   else
-   ret = register_netdevice(pnetdev);
-   if (ret != 0) {
-   RT_TRACE(_module_hci_intfs_c_, _drv_err_,
-("register_netdev() failed\n"));
-   goto error;
-   }
-   rtw_proc_init_one(pnetdev);
-   return 0;
-error:
-   return -1;
-}
-
 u64 rtw_modular64(u64 x, u64 y)
 {
return do_div(x, y);
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 02/13] staging: rtl8188eu: Remove function rtw_alloc_etherdev()

2014-07-07 Thread navin patidar
rtw_alloc_etherdev() is used in rtw_init_netdev() but never gets called
because old_padapter is never NULL.

Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/osdep_service.h |1 -
 drivers/staging/rtl8188eu/os_dep/os_intfs.c   |4 +---
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |   23 -
 3 files changed, 1 insertion(+), 27 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 95131fe..a52dcd5 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -164,7 +164,6 @@ struct rtw_netdev_priv_indicator {
 };
 struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
void *old_priv);
-struct net_device *rtw_alloc_etherdev(int sizeof_priv);
 
 #define rtw_netdev_priv(netdev)\
(((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c 
b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
index b0c38a4..c7a44ab 100644
--- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
@@ -707,14 +707,12 @@ static const struct device_type wlan_type = {
 struct net_device *rtw_init_netdev(struct adapter *old_padapter)
 {
struct adapter *padapter;
-   struct net_device *pnetdev;
+   struct net_device *pnetdev = NULL;
 
RT_TRACE(_module_os_intfs_c_, _drv_info_, ("+init_net_dev\n"));
 
if (old_padapter != NULL)
pnetdev = rtw_alloc_etherdev_with_old_priv(sizeof(struct 
adapter), (void *)old_padapter);
-   else
-   pnetdev = rtw_alloc_etherdev(sizeof(struct adapter));
 
if (!pnetdev)
return NULL;
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index 76eddcd..93c76d7 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -111,29 +111,6 @@ RETURN:
return pnetdev;
 }
 
-struct net_device *rtw_alloc_etherdev(int sizeof_priv)
-{
-   struct net_device *pnetdev;
-   struct rtw_netdev_priv_indicator *pnpi;
-
-   pnetdev = alloc_etherdev_mq(sizeof(struct rtw_netdev_priv_indicator), 
4);
-   if (!pnetdev)
-   goto RETURN;
-
-   pnpi = netdev_priv(pnetdev);
-
-   pnpi->priv = vzalloc(sizeof_priv);
-   if (!pnpi->priv) {
-   free_netdev(pnetdev);
-   pnetdev = NULL;
-   goto RETURN;
-   }
-
-   pnpi->sizeof_priv = sizeof_priv;
-RETURN:
-   return pnetdev;
-}
-
 void rtw_free_netdev(struct net_device *netdev)
 {
struct rtw_netdev_priv_indicator *pnpi;
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 06/13] staging: rtl8188eu: Remove unused functions rtw_efuse_map_[read, write]()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_efuse.c|  113 -
 drivers/staging/rtl8188eu/include/rtw_efuse.h |2 -
 2 files changed, 115 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c 
b/drivers/staging/rtl8188eu/core/rtw_efuse.c
index 2189183..df8d934 100644
--- a/drivers/staging/rtl8188eu/core/rtw_efuse.c
+++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c
@@ -983,119 +983,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, 
u8 *targetdata)
 }
 
 /*
- * read/wirte raw efuse data
- */
-
-u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
-{
-   u16 mapLen = 0;
-
-   EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, 
(void *)&mapLen);
-
-   if ((addr + cnts) > mapLen)
-   return _FAIL;
-
-   Efuse_PowerSwitch(padapter, false, true);
-
-   efuse_ReadEFuse(padapter, EFUSE_WIFI, addr, cnts, data);
-
-   Efuse_PowerSwitch(padapter, false, false);
-
-   return _SUCCESS;
-}
-
-u8 rtw_efuse_map_write(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
-{
-   u8 offset, word_en;
-   u8 *map;
-   u8 newdata[PGPKT_DATA_SIZE + 1];
-   s32 i, idx;
-   u8 ret = _SUCCESS;
-   u16 mapLen = 0;
-
-   EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, TYPE_EFUSE_MAP_LEN, 
(void *)&mapLen);
-
-   if ((addr + cnts) > mapLen)
-   return _FAIL;
-
-   map = kzalloc(mapLen, GFP_KERNEL);
-   if (map == NULL)
-   return _FAIL;
-
-   ret = rtw_efuse_map_read(padapter, 0, mapLen, map);
-   if (ret == _FAIL)
-   goto exit;
-
-   Efuse_PowerSwitch(padapter, true, true);
-
-   offset = (addr >> 3);
-   word_en = 0xF;
-   memset(newdata, 0xFF, PGPKT_DATA_SIZE + 1);
-   i = addr & 0x7; /*  index of one package */
-   idx = 0;/*  data index */
-
-   if (i & 0x1) {
-   /*  odd start */
-   if (data[idx] != map[addr+idx]) {
-   word_en &= ~BIT(i >> 1);
-   newdata[i-1] = map[addr+idx-1];
-   newdata[i] = data[idx];
-   }
-   i++;
-   idx++;
-   }
-   do {
-   for (; i < PGPKT_DATA_SIZE; i += 2) {
-   if (cnts == idx)
-   break;
-   if ((cnts - idx) == 1) {
-   if (data[idx] != map[addr+idx]) {
-   word_en &= ~BIT(i >> 1);
-   newdata[i] = data[idx];
-   newdata[i+1] = map[addr+idx+1];
-   }
-   idx++;
-   break;
-   } else {
-   if ((data[idx] != map[addr+idx]) ||
-   (data[idx+1] != map[addr+idx+1])) {
-   word_en &= ~BIT(i >> 1);
-   newdata[i] = data[idx];
-   newdata[i+1] = data[idx + 1];
-   }
-   idx += 2;
-   }
-   if (idx == cnts)
-   break;
-   }
-
-   if (word_en != 0xF) {
-   ret = Efuse_PgPacketWrite(padapter, offset, word_en, 
newdata);
-   DBG_88E("offset=%x\n", offset);
-   DBG_88E("word_en=%x\n", word_en);
-
-   for (i = 0; i < PGPKT_DATA_SIZE; i++)
-   DBG_88E("data=%x \t", newdata[i]);
-   if (ret == _FAIL)
-   break;
-   }
-
-   if (idx == cnts)
-   break;
-
-   offset++;
-   i = 0;
-   word_en = 0xF;
-   memset(newdata, 0xFF, PGPKT_DATA_SIZE);
-   } while (1);
-
-   Efuse_PowerSwitch(padapter, true, false);
-exit:
-   kfree(map);
-   return ret;
-}
-
-/*
  * Function:   efuse_ShadowRead1Byte
  * efuse_ShadowRead2Byte
  * efuse_ShadowRead4Byte
diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h 
b/drivers/staging/rtl8188eu/include/rtw_efuse.h
index 6d20fcc..adeb501 100644
--- a/drivers/staging/rtl8188eu/include/rtw_efuse.h
+++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h
@@ -99,8 +99,6 @@ struct efuse_hal {
u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
 };
 
-u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
-u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
 u16 Efuse_GetCurrentSize(struct adapter *adapter);
 u8 Efuse_CalculateWordCnts(u8 word_en);
 void EFUSE_GetEfuseDefinition(struct adapter *adapt, u8 type, u8 type1,
-- 
1.7

[PATCH 04/13] staging: rtl8188eu: Remove unused function efuse_GetMaxSize()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_efuse.c|7 ---
 drivers/staging/rtl8188eu/include/rtw_efuse.h |1 -
 2 files changed, 8 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c 
b/drivers/staging/rtl8188eu/core/rtw_efuse.c
index 0e20d5c..ede7708 100644
--- a/drivers/staging/rtl8188eu/core/rtw_efuse.c
+++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c
@@ -1035,13 +1035,6 @@ u8 rtw_efuse_access(struct adapter *padapter, u8 write, 
u16 start_addr, u16 cnts
return res;
 }

-u16 efuse_GetMaxSize(struct adapter *padapter)
-{
-   u16 max_size;
-   EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI , 
TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_size);
-   return max_size;
-}
-
 u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
 {
u16 mapLen = 0;
diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h 
b/drivers/staging/rtl8188eu/include/rtw_efuse.h
index 6b56501..86a1832 100644
--- a/drivers/staging/rtl8188eu/include/rtw_efuse.h
+++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h
@@ -99,7 +99,6 @@ struct efuse_hal {
u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
 };

-u16 efuse_GetMaxSize(struct adapter *adapter);
 u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr,
u16 cnts, u8 *data);
 u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
--
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 05/13] staging: rtl8188eu: rtw_efuse.c : Remove unused functions

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_efuse.c|   49 -
 drivers/staging/rtl8188eu/include/rtw_efuse.h |2 -
 2 files changed, 51 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c 
b/drivers/staging/rtl8188eu/core/rtw_efuse.c
index ede7708..2189183 100644
--- a/drivers/staging/rtl8188eu/core/rtw_efuse.c
+++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c
@@ -982,58 +982,9 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 
*targetdata)
}
 }
 
-static u8 efuse_read8(struct adapter *padapter, u16 address, u8 *value)
-{
-   return efuse_OneByteRead(padapter, address, value);
-}
-
-static u8 efuse_write8(struct adapter *padapter, u16 address, u8 *value)
-{
-   return efuse_OneByteWrite(padapter, address, *value);
-}
-
 /*
  * read/wirte raw efuse data
  */
-u8 rtw_efuse_access(struct adapter *padapter, u8 write, u16 start_addr, u16 
cnts, u8 *data)
-{
-   int i = 0;
-   u16 real_content_len = 0, max_available_size = 0;
-   u8 res = _FAIL;
-   u8 (*rw8)(struct adapter *, u16, u8*);
-
-   EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, 
TYPE_EFUSE_REAL_CONTENT_LEN, (void *)&real_content_len);
-   EFUSE_GetEfuseDefinition(padapter, EFUSE_WIFI, 
TYPE_AVAILABLE_EFUSE_BYTES_TOTAL, (void *)&max_available_size);
-
-   if (start_addr > real_content_len)
-   return _FAIL;
-
-   if (write) {
-   if ((start_addr + cnts) > max_available_size)
-   return _FAIL;
-   rw8 = &efuse_write8;
-   } else {
-   rw8 = &efuse_read8;
-   }
-
-   Efuse_PowerSwitch(padapter, write, true);
-
-   /*  e-fuse one byte read / write */
-   for (i = 0; i < cnts; i++) {
-   if (start_addr >= real_content_len) {
-   res = _FAIL;
-   break;
-   }
-
-   res = rw8(padapter, start_addr++, data++);
-   if (_FAIL == res)
-   break;
-   }
-
-   Efuse_PowerSwitch(padapter, write, false);
-
-   return res;
-}
 
 u8 rtw_efuse_map_read(struct adapter *padapter, u16 addr, u16 cnts, u8 *data)
 {
diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h 
b/drivers/staging/rtl8188eu/include/rtw_efuse.h
index 86a1832..6d20fcc 100644
--- a/drivers/staging/rtl8188eu/include/rtw_efuse.h
+++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h
@@ -99,8 +99,6 @@ struct efuse_hal {
u8 fakeBTEfuseModifiedMap[EFUSE_BT_MAX_MAP_LEN];
 };
 
-u8 rtw_efuse_access(struct adapter *adapter, u8 read, u16 start_addr,
-   u16 cnts, u8 *data);
 u8 rtw_efuse_map_read(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
 u8 rtw_efuse_map_write(struct adapter *adapter, u16 addr, u16 cnts, u8 *data);
 u16 Efuse_GetCurrentSize(struct adapter *adapter);
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 07/13] staging: rtl8188eu: Remove unused function HalDetectPwrDownMode88E()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c |   19 ---
 drivers/staging/rtl8188eu/include/rtl8188e_hal.h  |2 --
 2 files changed, 21 deletions(-)

diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c 
b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c
index 1abf974..161138f 100644
--- a/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c
+++ b/drivers/staging/rtl8188eu/hal/rtl8188e_hal_init.c
@@ -1079,25 +1079,6 @@ void Hal_ReadThermalMeter_88E(struct adapter *Adapter, 
u8 *PROMContent, bool Aut
DBG_88E("ThermalMeter = 0x%x\n", pHalData->EEPROMThermalMeter);
 }
 
-bool HalDetectPwrDownMode88E(struct adapter *Adapter)
-{
-   u8 tmpvalue = 0;
-   struct hal_data_8188e *pHalData = GET_HAL_DATA(Adapter);
-   struct pwrctrl_priv *pwrctrlpriv = &Adapter->pwrctrlpriv;
-
-   EFUSE_ShadowRead(Adapter, 1, EEPROM_RF_FEATURE_OPTION_88E, (u32 
*)&tmpvalue);
-
-   /*  2010/08/25 MH INF priority > PDN Efuse value. */
-   if (tmpvalue & BIT(4) && pwrctrlpriv->reg_pdnmode)
-   pHalData->pwrdown = true;
-   else
-   pHalData->pwrdown = false;
-
-   DBG_88E("HalDetectPwrDownMode(): PDN =%d\n", pHalData->pwrdown);
-
-   return pHalData->pwrdown;
-}  /*  HalDetectPwrDownMode */
-
 /*  This function is used only for 92C to set REG_BCN_CTRL(0x550) register. */
 /*  We just reserve the value of the register in variable 
pHalData->RegBcnCtrlVal and then operate */
 /*  the value of the register via atomic operation. */
diff --git a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h 
b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
index a0a3ca7..4b7b069 100644
--- a/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
+++ b/drivers/staging/rtl8188eu/include/rtl8188e_hal.h
@@ -451,8 +451,6 @@ void Hal_EfuseParseBoardType88E(struct adapter *pAdapter, 
u8 *hwinfo,
 void Hal_ReadPowerSavingMode88E(struct adapter *pAdapter, u8 *hwinfo,
bool AutoLoadFail);
 
-bool HalDetectPwrDownMode88E(struct adapter *Adapter);
-
 void rtl8188e_set_hal_ops(struct hal_ops *pHalFunc);
 
 /*  register */
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 08/13] staging: rtl8188eu: rtw_efuse.c: Remove unused functions

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_efuse.c|   60 -
 drivers/staging/rtl8188eu/include/rtw_efuse.h |2 -
 2 files changed, 62 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_efuse.c 
b/drivers/staging/rtl8188eu/core/rtw_efuse.c
index df8d934..5b997b2 100644
--- a/drivers/staging/rtl8188eu/core/rtw_efuse.c
+++ b/drivers/staging/rtl8188eu/core/rtw_efuse.c
@@ -983,53 +983,6 @@ void efuse_WordEnableDataRead(u8 word_en, u8 *sourdata, u8 
*targetdata)
 }
 
 /*
- * Function:   efuse_ShadowRead1Byte
- * efuse_ShadowRead2Byte
- * efuse_ShadowRead4Byte
- *
- * Overview:   Read from efuse init map by one/two/four bytes !
- */
-static void
-efuse_ShadowRead1Byte(
-   struct adapter *pAdapter,
-   u16 Offset,
-   u8 *Value)
-{
-   struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-   *Value = pEEPROM->efuse_eeprom_data[Offset];
-
-}
-
-static void
-efuse_ShadowRead2Byte(
-   struct adapter *pAdapter,
-   u16 Offset,
-   u16 *Value)
-{
-   struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-   *Value = pEEPROM->efuse_eeprom_data[Offset];
-   *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
-
-}
-
-static void
-efuse_ShadowRead4Byte(
-   struct adapter *pAdapter,
-   u16 Offset,
-   u32 *Value)
-{
-   struct eeprom_priv *pEEPROM = GET_EEPROM_EFUSE_PRIV(pAdapter);
-
-   *Value = pEEPROM->efuse_eeprom_data[Offset];
-   *Value |= pEEPROM->efuse_eeprom_data[Offset+1]<<8;
-   *Value |= pEEPROM->efuse_eeprom_data[Offset+2]<<16;
-   *Value |= pEEPROM->efuse_eeprom_data[Offset+3]<<24;
-
-}
-
-/*
  * Overview:   Read All Efuse content
  */
 static void Efuse_ReadAllMap(struct adapter *pAdapter, u8 efuseType, u8 *Efuse)
@@ -1062,16 +1015,3 @@ void EFUSE_ShadowMapUpdate(
else
Efuse_ReadAllMap(pAdapter, efuseType, 
pEEPROM->efuse_eeprom_data);
 }
-
-/*
- * Overview:   Read from efuse init map !
- */
-void EFUSE_ShadowRead(struct adapter *pAdapter, u8 Type, u16 Offset, u32 
*Value)
-{
-   if (Type == 1)
-   efuse_ShadowRead1Byte(pAdapter, Offset, (u8 *)Value);
-   else if (Type == 2)
-   efuse_ShadowRead2Byte(pAdapter, Offset, (u16 *)Value);
-   else if (Type == 4)
-   efuse_ShadowRead4Byte(pAdapter, Offset, (u32 *)Value);
-}
diff --git a/drivers/staging/rtl8188eu/include/rtw_efuse.h 
b/drivers/staging/rtl8188eu/include/rtw_efuse.h
index adeb501..720f9ea 100644
--- a/drivers/staging/rtl8188eu/include/rtw_efuse.h
+++ b/drivers/staging/rtl8188eu/include/rtw_efuse.h
@@ -116,6 +116,4 @@ u8 Efuse_WordEnableDataWrite(struct adapter *adapter, u16 
efuse_addr,
 u8 word_en, u8 *data);
 
 void EFUSE_ShadowMapUpdate(struct adapter *adapter, u8 efusetype);
-void EFUSE_ShadowRead(struct adapter *adapt, u8 type, u16 offset, u32 *val);
-
 #endif
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 09/13] staging: rtl8188eu: use jiffies_to_msecs() instead of rtw_systime_to_ms()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/osdep_service.h |1 -
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |7 +--
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index a52dcd5..3ddaa34 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -154,7 +154,6 @@ u32  _rtw_down_sema(struct semaphore *sema);
 
 void _rtw_init_queue(struct __queue *pqueue);
 
-u32  rtw_systime_to_ms(u32 systime);
 u32  rtw_ms_to_systime(u32 ms);
 s32  rtw_get_passing_time_ms(u32 start);
 
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index 93c76d7..96f8eb8 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -77,11 +77,6 @@ void _rtw_init_queue(struct __queue *pqueue)
spin_lock_init(&(pqueue->lock));
 }
 
-inline u32 rtw_systime_to_ms(u32 systime)
-{
-   return systime * 1000 / HZ;
-}
-
 inline u32 rtw_ms_to_systime(u32 ms)
 {
return ms * HZ / 1000;
@@ -90,7 +85,7 @@ inline u32 rtw_ms_to_systime(u32 ms)
 /*  the input parameter start must be in jiffies */
 inline s32 rtw_get_passing_time_ms(u32 start)
 {
-   return rtw_systime_to_ms(jiffies-start);
+   return jiffies_to_msecs(jiffies-start);
 }
 
 struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv,
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 13/13] staging: rtl8188eu: osdep_service.h: Remove unused struct rtw_cbuf

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/osdep_service.h |7 ---
 1 file changed, 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 3a620f8..fed9c86 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -187,11 +187,4 @@ u64 rtw_modular64(u64 x, u64 y);
 
 void rtw_buf_free(u8 **buf, u32 *buf_len);
 void rtw_buf_update(u8 **buf, u32 *buf_len, u8 *src, u32 src_len);
-
-struct rtw_cbuf {
-   u32 write;
-   u32 read;
-   u32 size;
-   void *bufs[0];
-};
 #endif
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 10/13] staging: rtl8188eu: Use msecs_to_jiffies() instead of rtw_ms_to_systime()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/core/rtw_pwrctrl.c  |   10 +-
 drivers/staging/rtl8188eu/include/osdep_service.h |1 -
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |5 -
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c 
b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
index 439bc8f..27ed83c 100644
--- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
+++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
@@ -551,7 +551,7 @@ void rtw_init_pwrctrl_priv(struct adapter *padapter)
 inline void rtw_set_ips_deny(struct adapter *padapter, u32 ms)
 {
struct pwrctrl_priv *pwrpriv = &padapter->pwrctrlpriv;
-   pwrpriv->ips_deny_time = jiffies + rtw_ms_to_systime(ms);
+   pwrpriv->ips_deny_time = jiffies + msecs_to_jiffies(ms);
 }
 
 /*
@@ -568,9 +568,9 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 
ips_deffer_ms, const char *cal
unsigned long expires;
int ret = _SUCCESS;
 
-   expires = jiffies + rtw_ms_to_systime(ips_deffer_ms);
+   expires = jiffies + msecs_to_jiffies(ips_deffer_ms);
if (time_before(pwrpriv->ips_deny_time, expires))
-   pwrpriv->ips_deny_time = jiffies + 
rtw_ms_to_systime(ips_deffer_ms);
+   pwrpriv->ips_deny_time = jiffies + 
msecs_to_jiffies(ips_deffer_ms);
 
 {
u32 start = jiffies;
@@ -624,9 +624,9 @@ int _rtw_pwr_wakeup(struct adapter *padapter, u32 
ips_deffer_ms, const char *cal
}
 
 exit:
-   expires = jiffies + rtw_ms_to_systime(ips_deffer_ms);
+   expires = jiffies + msecs_to_jiffies(ips_deffer_ms);
if (time_before(pwrpriv->ips_deny_time, expires))
-   pwrpriv->ips_deny_time = jiffies + 
rtw_ms_to_systime(ips_deffer_ms);
+   pwrpriv->ips_deny_time = jiffies + 
msecs_to_jiffies(ips_deffer_ms);
return ret;
 }
 
diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 3ddaa34..238930c 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -154,7 +154,6 @@ u32  _rtw_down_sema(struct semaphore *sema);
 
 void _rtw_init_queue(struct __queue *pqueue);
 
-u32  rtw_ms_to_systime(u32 ms);
 s32  rtw_get_passing_time_ms(u32 start);
 
 struct rtw_netdev_priv_indicator {
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index 96f8eb8..db6ee31 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -77,11 +77,6 @@ void _rtw_init_queue(struct __queue *pqueue)
spin_lock_init(&(pqueue->lock));
 }
 
-inline u32 rtw_ms_to_systime(u32 ms)
-{
-   return ms * HZ / 1000;
-}
-
 /*  the input parameter start must be in jiffies */
 inline s32 rtw_get_passing_time_ms(u32 start)
 {
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 11/13] staging: rtl8188eu: Remove unused function rtw_cbuf_alloc()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/osdep_service.h |1 -
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |   21 -
 2 files changed, 22 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 238930c..2a20fca 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -199,6 +199,5 @@ bool rtw_cbuf_full(struct rtw_cbuf *cbuf);
 bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
 bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
 void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
-struct rtw_cbuf *rtw_cbuf_alloc(u32 size);
 
 #endif
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index db6ee31..f54cf52 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -228,24 +228,3 @@ void *rtw_cbuf_pop(struct rtw_cbuf *cbuf)
 
return buf;
 }
-
-/**
- * rtw_cbuf_alloc - allocate a rtw_cbuf with given size and do initialization
- * @size: size of pointer
- *
- * Returns: pointer of srtuct rtw_cbuf, NULL for allocation failure
- */
-struct rtw_cbuf *rtw_cbuf_alloc(u32 size)
-{
-   struct rtw_cbuf *cbuf;
-
-   cbuf = (struct rtw_cbuf *)rtw_malloc(sizeof(*cbuf) +
-  sizeof(void *)*size);
-
-   if (cbuf) {
-   cbuf->write = 0;
-   cbuf->read = 0;
-   cbuf->size = size;
-   }
-   return cbuf;
-}
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 12/13] staging: rtl8188eu: Remove unused functions rtw_cbuf_[full, empty, push, pop]()

2014-07-07 Thread navin patidar
Signed-off-by: navin patidar 
---
 drivers/staging/rtl8188eu/include/osdep_service.h |6 --
 drivers/staging/rtl8188eu/os_dep/osdep_service.c  |   65 -
 2 files changed, 71 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 2a20fca..3a620f8 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -194,10 +194,4 @@ struct rtw_cbuf {
u32 size;
void *bufs[0];
 };
-
-bool rtw_cbuf_full(struct rtw_cbuf *cbuf);
-bool rtw_cbuf_empty(struct rtw_cbuf *cbuf);
-bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf);
-void *rtw_cbuf_pop(struct rtw_cbuf *cbuf);
-
 #endif
diff --git a/drivers/staging/rtl8188eu/os_dep/osdep_service.c 
b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
index f54cf52..8af4a8d 100644
--- a/drivers/staging/rtl8188eu/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8188eu/os_dep/osdep_service.c
@@ -163,68 +163,3 @@ keep_ori:
/* free ori */
kfree(ori);
 }
-
-
-/**
- * rtw_cbuf_full - test if cbuf is full
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Returns: true if cbuf is full
- */
-inline bool rtw_cbuf_full(struct rtw_cbuf *cbuf)
-{
-   return (cbuf->write == cbuf->read-1) ? true : false;
-}
-
-/**
- * rtw_cbuf_empty - test if cbuf is empty
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Returns: true if cbuf is empty
- */
-inline bool rtw_cbuf_empty(struct rtw_cbuf *cbuf)
-{
-   return (cbuf->write == cbuf->read) ? true : false;
-}
-
-/**
- * rtw_cbuf_push - push a pointer into cbuf
- * @cbuf: pointer of struct rtw_cbuf
- * @buf: pointer to push in
- *
- * Lock free operation, be careful of the use scheme
- * Returns: true push success
- */
-bool rtw_cbuf_push(struct rtw_cbuf *cbuf, void *buf)
-{
-   if (rtw_cbuf_full(cbuf))
-   return _FAIL;
-
-   if (0)
-   DBG_88E("%s on %u\n", __func__, cbuf->write);
-   cbuf->bufs[cbuf->write] = buf;
-   cbuf->write = (cbuf->write+1)%cbuf->size;
-
-   return _SUCCESS;
-}
-
-/**
- * rtw_cbuf_pop - pop a pointer from cbuf
- * @cbuf: pointer of struct rtw_cbuf
- *
- * Lock free operation, be careful of the use scheme
- * Returns: pointer popped out
- */
-void *rtw_cbuf_pop(struct rtw_cbuf *cbuf)
-{
-   void *buf;
-   if (rtw_cbuf_empty(cbuf))
-   return NULL;
-
-   if (0)
-   DBG_88E("%s on %u\n", __func__, cbuf->read);
-   buf = cbuf->bufs[cbuf->read];
-   cbuf->read = (cbuf->read+1)%cbuf->size;
-
-   return buf;
-}
-- 
1.7.10.4

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/5] staging:iio:hmc5843: Added regmap support

2014-07-07 Thread Josef Gajdusek
On Mon, Jul 07, 2014 at 06:00:29PM +0100, Jonathan Cameron wrote:
> On 02/07/14 14:50, Josef Gajdusek wrote:
> > This patch changes hmc5843.c to use regmap. This provides transparent 
> > caching
> > to the code as well as abstraction necessary to add support for SPI-based
> > hmc5983.
> >
> > Signed-off-by: Josef Gajdusek 
> Hi Josef,
> 
> A few little bits and pieces inline.
> Peter, could you also take a look at this series?
> 
> Thanks,
> 
> Jonathan

Hello,

> Whilst minor, we do have a slight change in how this works in the
> event
> of an error.  I don't particularly mind it, but perhaps should have
> been broken out for separate discussion.

It could be changed to use _check version of the regmap function (all
other update_bits calls then probably should be changed as well). Though
that would double the amount of data sent and be of any use only on
defective chip.

> Why move these?  You now have the device going to sleep whilst
> the userspace interface is still available...

strange, I remember this causing issues. Now I am unable to
reproduce them so it was probably something else. Do you want me to
resend or can you apply without these lines swapped?
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/5] staging:iio:hmc5843: Added regmap support

2014-07-07 Thread Peter Meerwald

> >> > This patch changes hmc5843.c to use regmap. This provides
> >transparent caching
> >> > to the code as well as abstraction necessary to add support for
> >SPI-based
> >> > hmc5983.
> >> >
> >> > Signed-off-by: Josef Gajdusek 
> >> Hi Josef,
> >> 
> >> A few little bits and pieces inline.
> >> Peter, could you also take a look at this series?

I might manage to test the proposed code on a hmc5883l, probably until the 
weekend; otherwise patches look good

> >strange, I remember this causing issues. Now I am unable to
> >reproduce them so it was probably something else. Do you want me to
> >resend or can you apply without these lines swapped?
> 
> I am feeling lazy plus might not get to this until Saturday so resend.

-- 

Peter Meerwald
+43-664-218 (mobile)
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 0/5] staging:iio:hmc5843: Few adjustments and support for hmc5983

2014-07-07 Thread Josef Gajdusek
This patch series modifies the hmc5843 driver to support the hmc5983 i2c and
spi interfaces.

Josef Gajdusek (5):
  staging:iio:hmc5843: Added regmap support
  staging:iio:hmc5843: Split hmc5843.c to multiple files
  staging:iio:hmc5843: register <-> value arrays now can have different
lengths
  staging:iio:hmc5843: Add support for i2c hmc5983
  staging:iio:hmc5843: Add support for spi hmc5983

 drivers/staging/iio/magnetometer/Kconfig|  23 +-
 drivers/staging/iio/magnetometer/Makefile   |   4 +-
 drivers/staging/iio/magnetometer/hmc5843.c  | 652 
 drivers/staging/iio/magnetometer/hmc5843.h  |  76 +++
 drivers/staging/iio/magnetometer/hmc5843_core.c | 626 +++
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  | 107 
 drivers/staging/iio/magnetometer/hmc5843_spi.c  | 105 
 7 files changed, 937 insertions(+), 656 deletions(-)
 delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c

-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH v2 1/5] staging:iio:hmc5843: Added regmap support

2014-07-07 Thread Josef Gajdusek
This patch changes hmc5843.c to use regmap. This provides transparent caching
to the code as well as abstraction necessary to add support for SPI-based
hmc5983.

Signed-off-by: Josef Gajdusek 
---
 drivers/staging/iio/magnetometer/Kconfig   |   1 +
 drivers/staging/iio/magnetometer/hmc5843.c | 139 +++--
 2 files changed, 95 insertions(+), 45 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 34634da..ad88d61 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -8,6 +8,7 @@ config SENSORS_HMC5843
depends on I2C
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
+   select REGMAP_I2C
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c 
b/drivers/staging/iio/magnetometer/hmc5843.c
index d4f4dd9..1a48799 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ b/drivers/staging/iio/magnetometer/hmc5843.c
@@ -21,6 +21,7 @@
 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -34,6 +35,7 @@
 #define HMC5843_DATA_OUT_MSB_REGS  0x03
 #define HMC5843_STATUS_REG 0x09
 #define HMC5843_ID_REG 0x0a
+#define HMC5843_ID_END 0x0c
 
 enum hmc5843_ids {
HMC5843_ID,
@@ -49,6 +51,7 @@ enum hmc5843_ids {
 #define HMC5843_RANGE_GAIN_OFFSET  0x05
 #define HMC5843_RANGE_GAIN_DEFAULT 0x01
 #define HMC5843_RANGE_GAINS8
+#define HMC5843_RANGE_GAIN_MASK0xe0
 
 /* Device status */
 #define HMC5843_DATA_READY 0x01
@@ -68,6 +71,7 @@ enum hmc5843_ids {
 #define HMC5843_RATE_OFFSET0x02
 #define HMC5843_RATE_DEFAULT   0x04
 #define HMC5843_RATES  7
+#define HMC5843_RATE_MASK  0x1c
 
 /* Device measurement configuration */
 #define HMC5843_MEAS_CONF_NORMAL   0x00
@@ -121,10 +125,7 @@ struct hmc5843_chip_info {
 struct hmc5843_data {
struct i2c_client *client;
struct mutex lock;
-   u8 rate;
-   u8 meas_conf;
-   u8 operating_mode;
-   u8 range;
+   struct regmap *regmap;
const struct hmc5843_chip_info *variant;
__be16 buffer[8]; /* 3x 16-bit channels + padding + 64-bit timestamp */
 };
@@ -135,10 +136,8 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 
operating_mode)
int ret;
 
mutex_lock(&data->lock);
-   ret = i2c_smbus_write_byte_data(data->client, HMC5843_MODE_REG,
-   operating_mode & HMC5843_MODE_MASK);
-   if (ret >= 0)
-   data->operating_mode = operating_mode;
+   ret = regmap_update_bits(data->regmap, HMC5843_MODE_REG,
+   HMC5843_MODE_MASK, operating_mode);
mutex_unlock(&data->lock);
 
return ret;
@@ -146,15 +145,15 @@ static s32 hmc5843_set_mode(struct hmc5843_data *data, u8 
operating_mode)
 
 static int hmc5843_wait_measurement(struct hmc5843_data *data)
 {
-   s32 result;
int tries = 150;
+   int val;
+   int ret;
 
while (tries-- > 0) {
-   result = i2c_smbus_read_byte_data(data->client,
-   HMC5843_STATUS_REG);
-   if (result < 0)
-   return result;
-   if (result & HMC5843_DATA_READY)
+   ret = regmap_read(data->regmap, HMC5843_STATUS_REG, &val);
+   if (ret < 0)
+   return ret;
+   if (val & HMC5843_DATA_READY)
break;
msleep(20);
}
@@ -171,20 +170,20 @@ static int hmc5843_wait_measurement(struct hmc5843_data 
*data)
 static int hmc5843_read_measurement(struct hmc5843_data *data,
int idx, int *val)
 {
-   s32 result;
__be16 values[3];
+   int ret;
 
mutex_lock(&data->lock);
-   result = hmc5843_wait_measurement(data);
-   if (result < 0) {
+   ret = hmc5843_wait_measurement(data);
+   if (ret < 0) {
mutex_unlock(&data->lock);
-   return result;
+   return ret;
}
-   result = i2c_smbus_read_i2c_block_data(data->client,
-   HMC5843_DATA_OUT_MSB_REGS, sizeof(values), (u8 *) values);
+   ret = regmap_bulk_read(data->regmap, HMC5843_DATA_OUT_MSB_REGS,
+   values, sizeof(values));
mutex_unlock(&data->lock);
-   if (result < 0)
-   return -EINVAL;
+   if (ret < 0)
+   return ret;
 
*val = sign_extend32(be16_to_cpu(values[idx]), 15);
return IIO_VAL_INT;
@@ -208,16 +207,13 @@ static int hmc5843_read_measurement(struct hmc5843_data 
*data,
  * and BN.
  *
  *

[PATCH v2 2/5] staging:iio:hmc5843: Split hmc5843.c to multiple files

2014-07-07 Thread Josef Gajdusek
This patch splits hmc5843.c to multiple files - the interface-agnostic
hmc5843_core.c, i2c specific hmc5843_i2c.c and header file hmc5843.h. This is
another step to add support of SPI-enabled hmc5983.

Signed-off-by: Josef Gajdusek 
---
 drivers/staging/iio/magnetometer/Kconfig|  16 +-
 drivers/staging/iio/magnetometer/Makefile   |   3 +-
 drivers/staging/iio/magnetometer/hmc5843.c  | 701 
 drivers/staging/iio/magnetometer/hmc5843.h  |  75 +++
 drivers/staging/iio/magnetometer/hmc5843_core.c | 600 
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  | 106 
 6 files changed, 795 insertions(+), 706 deletions(-)
 delete mode 100644 drivers/staging/iio/magnetometer/hmc5843.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843.h
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_core.c
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_i2c.c

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index ad88d61..28c2612 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -5,15 +5,23 @@ menu "Magnetometer sensors"
 
 config SENSORS_HMC5843
tristate "Honeywell HMC5843/5883/5883L 3-Axis Magnetometer"
-   depends on I2C
+   depends on (I2C || SPI_MASTER)
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
-   select REGMAP_I2C
+   select SENSORS_HMC5843_I2C if (I2C)
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).
 
- To compile this driver as a module, choose M here: the module
- will be called hmc5843.
+ This driver can also be compiled as a set of modules.
+ If so, these modules will be created:
+ - hmc5843_core (core functions)
+ - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+
+config SENSORS_HMC5843_I2C
+   tristate
+   depends on I2C
+   depends on SENSORS_HMC5843
+   select REGMAP_I2C
 
 endmenu
diff --git a/drivers/staging/iio/magnetometer/Makefile 
b/drivers/staging/iio/magnetometer/Makefile
index f9bfb2e..65baf1c 100644
--- a/drivers/staging/iio/magnetometer/Makefile
+++ b/drivers/staging/iio/magnetometer/Makefile
@@ -2,4 +2,5 @@
 # Makefile for industrial I/O Magnetometer sensors
 #
 
-obj-$(CONFIG_SENSORS_HMC5843)  += hmc5843.o
+obj-$(CONFIG_SENSORS_HMC5843)  += hmc5843_core.o
+obj-$(CONFIG_SENSORS_HMC5843_I2C)  += hmc5843_i2c.o
diff --git a/drivers/staging/iio/magnetometer/hmc5843.c 
b/drivers/staging/iio/magnetometer/hmc5843.c
deleted file mode 100644
index 1a48799..000
--- a/drivers/staging/iio/magnetometer/hmc5843.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/*  Copyright (C) 2010 Texas Instruments
-Author: Shubhrajyoti Datta 
-Acknowledgement: Jonathan Cameron  for valuable inputs.
-
-Support for HMC5883 and HMC5883L by Peter Meerwald .
-
-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.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#define HMC5843_CONFIG_REG_A   0x00
-#define HMC5843_CONFIG_REG_B   0x01
-#define HMC5843_MODE_REG   0x02
-#define HMC5843_DATA_OUT_MSB_REGS  0x03
-#define HMC5843_STATUS_REG 0x09
-#define HMC5843_ID_REG 0x0a
-#define HMC5843_ID_END 0x0c
-
-enum hmc5843_ids {
-   HMC5843_ID,
-   HMC5883_ID,
-   HMC5883L_ID,
-};
-
-/*
- * Range gain settings in (+-)Ga
- * Beware: HMC5843 and HMC5883 have different recommended sensor field
- * ranges; default corresponds to +-1.0 Ga and +-1.3 Ga, respectively
- */
-#define HMC5843_RANGE_GAIN_OFFSET  0x05
-#define HMC5843_RANGE_GAIN_DEFAULT 0x01
-#define HMC5843_RANGE_GAINS8
-#define HMC5843_RANGE_GAIN_MASK0xe0
-
-/* Device status */
-#define HMC5843_DATA_READY 0x01
-#define HMC5843_DATA_OUTPUT_LOCK   0x02
-
-/* Mode register configuration */
-#define HMC5843_MODE_CONVERSION_CONTINUOUS 0x00
-#define HMC5843_MODE_CONVERSION_SINGLE 0x01
-#define HMC5843_MODE_IDLE

[PATCH v2 3/5] staging:iio:hmc5843: register <-> value arrays now can have different lengths

2014-07-07 Thread Josef Gajdusek
Changed structure of struct hmc5843_chip_info to include length of translation
arrays. Code previously using #defined constant has been changed accordingly.
This allows to integrate devices which do have different amounts of available
rates/scales.

Signed-off-by: Josef Gajdusek 
---
 drivers/staging/iio/magnetometer/hmc5843_core.c | 34 +
 1 file changed, 23 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c 
b/drivers/staging/iio/magnetometer/hmc5843_core.c
index efabca5..a808e4e 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_core.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_core.c
@@ -39,7 +39,6 @@
  */
 #define HMC5843_RANGE_GAIN_OFFSET  0x05
 #define HMC5843_RANGE_GAIN_DEFAULT 0x01
-#define HMC5843_RANGE_GAINS8
 #define HMC5843_RANGE_GAIN_MASK0xe0
 
 /* Device status */
@@ -59,7 +58,6 @@
  */
 #define HMC5843_RATE_OFFSET0x02
 #define HMC5843_RATE_DEFAULT   0x04
-#define HMC5843_RATES  7
 #define HMC5843_RATE_MASK  0x1c
 
 /* Device measurement configuration */
@@ -69,15 +67,15 @@
 #define HMC5843_MEAS_CONF_MASK 0x03
 
 /* Scaling factors: 1000/Gain */
-static const int hmc5843_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5843_regval_to_nanoscale[] = {
6173, 7692, 10309, 12821, 18868, 21739, 25641, 35714
 };
 
-static const int hmc5883_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883_regval_to_nanoscale[] = {
7812, 9766, 13021, 16287, 24096, 27701, 32573, 45662
 };
 
-static const int hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
+static const int hmc5883l_regval_to_nanoscale[] = {
7299, 9174, 12195, 15152, 22727, 25641, 30303, 43478
 };
 
@@ -94,11 +92,11 @@ static const int 
hmc5883l_regval_to_nanoscale[HMC5843_RANGE_GAINS] = {
  * 6   | 50| 75
  * 7   | Not used  | Not used
  */
-static const int hmc5843_regval_to_samp_freq[7][2] = {
+static const int hmc5843_regval_to_samp_freq[][2] = {
{0, 50}, {1, 0}, {2, 0}, {5, 0}, {10, 0}, {20, 0}, {50, 0}
 };
 
-static const int hmc5883_regval_to_samp_freq[7][2] = {
+static const int hmc5883_regval_to_samp_freq[][2] = {
{0, 75}, {1, 50}, {3, 0}, {7, 50}, {15, 0}, {30, 0},
{75, 0}
 };
@@ -107,7 +105,9 @@ static const int hmc5883_regval_to_samp_freq[7][2] = {
 struct hmc5843_chip_info {
const struct iio_chan_spec *channels;
const int (*regval_to_samp_freq)[2];
+   const int n_regval_to_samp_freq;
const int *regval_to_nanoscale;
+   const int n_regval_to_nanoscale;
 };
 
 /* The lower two bits contain the current conversion mode */
@@ -248,7 +248,7 @@ static ssize_t hmc5843_show_samp_freq_avail(struct device 
*dev,
size_t len = 0;
int i;
 
-   for (i = 0; i < HMC5843_RATES; i++)
+   for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
len += scnprintf(buf + len, PAGE_SIZE - len,
"%d.%d ", data->variant->regval_to_samp_freq[i][0],
data->variant->regval_to_samp_freq[i][1]);
@@ -278,7 +278,7 @@ static int hmc5843_get_samp_freq_index(struct hmc5843_data 
*data,
 {
int i;
 
-   for (i = 0; i < HMC5843_RATES; i++)
+   for (i = 0; i < data->variant->n_regval_to_samp_freq; i++)
if (val == data->variant->regval_to_samp_freq[i][0] &&
val2 == data->variant->regval_to_samp_freq[i][1])
return i;
@@ -307,7 +307,7 @@ static ssize_t hmc5843_show_scale_avail(struct device *dev,
size_t len = 0;
int i;
 
-   for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+   for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
len += scnprintf(buf + len, PAGE_SIZE - len,
"0.%09d ", data->variant->regval_to_nanoscale[i]);
 
@@ -327,7 +327,7 @@ static int hmc5843_get_scale_index(struct hmc5843_data 
*data, int val, int val2)
if (val != 0)
return -EINVAL;
 
-   for (i = 0; i < HMC5843_RANGE_GAINS; i++)
+   for (i = 0; i < data->variant->n_regval_to_nanoscale; i++)
if (val2 == data->variant->regval_to_nanoscale[i])
return i;
 
@@ -480,17 +480,29 @@ static const struct hmc5843_chip_info 
hmc5843_chip_info_tbl[] = {
[HMC5843_ID] = {
.channels = hmc5843_channels,
.regval_to_samp_freq = hmc5843_regval_to_samp_freq,
+   .n_regval_to_samp_freq =
+   ARRAY_SIZE(hmc5843_regval_to_samp_freq),
.regval_to_nanoscale = hmc5843_regval_to_nanoscale,
+   .n_regval_to_nanoscale =
+   ARRAY_SIZE(hmc5843_regval_to_nanoscale),
},
[HMC5883_ID] = {
 

[PATCH v2 4/5] staging:iio:hmc5843: Add support for i2c hmc5983

2014-07-07 Thread Josef Gajdusek
This patch adds support for the hmc5983 i2c interface.
This chip is almost identical to the hmc5883. The difference being added
temperature compensation, additional available sample rate (220Hz) and an SPI
interface.

Signed-off-by: Josef Gajdusek 
---
 drivers/staging/iio/magnetometer/Kconfig|  2 +-
 drivers/staging/iio/magnetometer/hmc5843.h  |  1 +
 drivers/staging/iio/magnetometer/hmc5843_core.c | 20 +---
 drivers/staging/iio/magnetometer/hmc5843_i2c.c  |  5 +++--
 4 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 28c2612..32c69c0 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -16,7 +16,7 @@ config SENSORS_HMC5843
  This driver can also be compiled as a set of modules.
  If so, these modules will be created:
  - hmc5843_core (core functions)
- - hmc5843_i2c (support for HMC5843, HMC5883 and HMC5883L)
+ - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
 
 config SENSORS_HMC5843_I2C
tristate
diff --git a/drivers/staging/iio/magnetometer/hmc5843.h 
b/drivers/staging/iio/magnetometer/hmc5843.h
index 4e3cce3..c36041a 100644
--- a/drivers/staging/iio/magnetometer/hmc5843.h
+++ b/drivers/staging/iio/magnetometer/hmc5843.h
@@ -29,6 +29,7 @@ enum hmc5843_ids {
HMC5843_ID,
HMC5883_ID,
HMC5883L_ID,
+   HMC5983_ID,
 };
 
 struct hmc5843_data {
diff --git a/drivers/staging/iio/magnetometer/hmc5843_core.c 
b/drivers/staging/iio/magnetometer/hmc5843_core.c
index a808e4e..fe7a79a 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_core.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_core.c
@@ -101,6 +101,11 @@ static const int hmc5883_regval_to_samp_freq[][2] = {
{75, 0}
 };
 
+static const int hmc5983_regval_to_samp_freq[][2] = {
+   {0, 75}, {1, 50}, {3, 0}, {7, 50}, {15, 0}, {30, 0},
+   {75, 0}, {220, 0}
+};
+
 /* Describe chip variants */
 struct hmc5843_chip_info {
const struct iio_chan_spec *channels;
@@ -457,7 +462,7 @@ static const struct iio_chan_spec hmc5843_channels[] = {
IIO_CHAN_SOFT_TIMESTAMP(3),
 };
 
-/* Beware: Y and Z are exchanged on HMC5883 */
+/* Beware: Y and Z are exchanged on HMC5883 and 5983 */
 static const struct iio_chan_spec hmc5883_channels[] = {
HMC5843_CHANNEL(X, 0),
HMC5843_CHANNEL(Z, 1),
@@ -504,6 +509,15 @@ static const struct hmc5843_chip_info 
hmc5843_chip_info_tbl[] = {
.n_regval_to_nanoscale =
ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
},
+   [HMC5983_ID] = {
+   .channels = hmc5883_channels,
+   .regval_to_samp_freq = hmc5983_regval_to_samp_freq,
+   .n_regval_to_samp_freq =
+   ARRAY_SIZE(hmc5983_regval_to_samp_freq),
+   .regval_to_nanoscale = hmc5883l_regval_to_nanoscale,
+   .n_regval_to_nanoscale =
+   ARRAY_SIZE(hmc5883l_regval_to_nanoscale),
+   }
 };
 
 static int hmc5843_init(struct hmc5843_data *data)
@@ -516,7 +530,7 @@ static int hmc5843_init(struct hmc5843_data *data)
if (ret < 0)
return ret;
if (id[0] != 'H' || id[1] != '4' || id[2] != '3') {
-   dev_err(data->dev, "no HMC5843/5883/5883L sensor\n");
+   dev_err(data->dev, "no HMC5843/5883/5883L/5983 sensor\n");
return -ENODEV;
}
 
@@ -608,5 +622,5 @@ int hmc5843_common_remove(struct iio_dev *indio_dev)
 EXPORT_SYMBOL(hmc5843_common_remove);
 
 MODULE_AUTHOR("Shubhrajyoti Datta ");
-MODULE_DESCRIPTION("HMC5843/5883/5883L core driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 core driver");
 MODULE_LICENSE("GPL");
diff --git a/drivers/staging/iio/magnetometer/hmc5843_i2c.c 
b/drivers/staging/iio/magnetometer/hmc5843_i2c.c
index b3c92d9..753c914 100644
--- a/drivers/staging/iio/magnetometer/hmc5843_i2c.c
+++ b/drivers/staging/iio/magnetometer/hmc5843_i2c.c
@@ -1,5 +1,5 @@
 /*
- * i2c driver for hmc5843/5843/5883/5883l
+ * i2c driver for hmc5843/5843/5883/5883l/5983
  *
  * Split from hmc5843.c
  * Copyright (C) Josef Gajdusek 
@@ -79,6 +79,7 @@ static const struct i2c_device_id hmc5843_id[] = {
{ "hmc5843", HMC5843_ID },
{ "hmc5883", HMC5883_ID },
{ "hmc5883l", HMC5883L_ID },
+   { "hmc5983", HMC5983_ID },
{ }
 };
 MODULE_DEVICE_TABLE(i2c, hmc5843_id);
@@ -102,5 +103,5 @@ static struct i2c_driver hmc5843_driver = {
 module_i2c_driver(hmc5843_driver);
 
 MODULE_AUTHOR("Josef Gajdusek ");
-MODULE_DESCRIPTION("HMC5843/5883/5883L i2c driver");
+MODULE_DESCRIPTION("HMC5843/5883/5883L/5983 i2c driver");
 MODULE_LICENSE("GPL");
-- 
1.8.5.5


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinf

[PATCH v2 5/5] staging:iio:hmc5843: Add support for spi hmc5983

2014-07-07 Thread Josef Gajdusek
This patch adds support for the hmc5983 spi interface.
This chip is almost identical to the hmc5883. The difference being added
temperature compensation, additional available sample rate (220Hz) and an SPI
interface.

Signed-off-by: Josef Gajdusek 
---
 drivers/staging/iio/magnetometer/Kconfig   |   8 ++
 drivers/staging/iio/magnetometer/Makefile  |   1 +
 drivers/staging/iio/magnetometer/hmc5843_spi.c | 105 +
 3 files changed, 114 insertions(+)
 create mode 100644 drivers/staging/iio/magnetometer/hmc5843_spi.c

diff --git a/drivers/staging/iio/magnetometer/Kconfig 
b/drivers/staging/iio/magnetometer/Kconfig
index 32c69c0..bc5c355 100644
--- a/drivers/staging/iio/magnetometer/Kconfig
+++ b/drivers/staging/iio/magnetometer/Kconfig
@@ -9,6 +9,7 @@ config SENSORS_HMC5843
select IIO_BUFFER
select IIO_TRIGGERED_BUFFER
select SENSORS_HMC5843_I2C if (I2C)
+   select SENSORS_HMC5843_SPI if (SPI_MASTER)
help
  Say Y here to add support for the Honeywell HMC5843, HMC5883 and
  HMC5883L 3-Axis Magnetometer (digital compass).
@@ -17,6 +18,7 @@ config SENSORS_HMC5843
  If so, these modules will be created:
  - hmc5843_core (core functions)
  - hmc5843_i2c (support for HMC5843, HMC5883, HMC5883L and HMC5983)
+ - hmc5843_spi (support for HMC5983)
 
 config SENSORS_HMC5843_I2C
tristate
@@ -24,4 +26,10 @@ config SENSORS_HMC5843_I2C
depends on SENSORS_HMC5843
select REGMAP_I2C
 
+config SENSORS_HMC5843_SPI
+   tristate
+   depends on SPI_MASTER
+   depends on SENSORS_HMC5843
+   select REGMAP_SPI
+
 endmenu
diff --git a/drivers/staging/iio/magnetometer/Makefile 
b/drivers/staging/iio/magnetometer/Makefile
index 65baf1c..33761a1 100644
--- a/drivers/staging/iio/magnetometer/Makefile
+++ b/drivers/staging/iio/magnetometer/Makefile
@@ -4,3 +4,4 @@
 
 obj-$(CONFIG_SENSORS_HMC5843)  += hmc5843_core.o
 obj-$(CONFIG_SENSORS_HMC5843_I2C)  += hmc5843_i2c.o
+obj-$(CONFIG_SENSORS_HMC5843_SPI)  += hmc5843_spi.o
diff --git a/drivers/staging/iio/magnetometer/hmc5843_spi.c 
b/drivers/staging/iio/magnetometer/hmc5843_spi.c
new file mode 100644
index 000..3f71ee0
--- /dev/null
+++ b/drivers/staging/iio/magnetometer/hmc5843_spi.c
@@ -0,0 +1,105 @@
+/*
+ * SPI driver for hmc5983
+ *
+ * Copyright (C) Josef Gajdusek 
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ * */
+
+#include 
+#include 
+#include 
+
+#include "hmc5843.h"
+
+struct regmap_config hmc5843_spi_regmap_config = {
+   .reg_bits = 8,
+   .val_bits = 8,
+
+   .rd_table = &hmc5843_readable_table,
+   .wr_table = &hmc5843_writable_table,
+   .volatile_table = &hmc5843_volatile_table,
+
+   /* Autoincrement address pointer */
+   .read_flag_mask = 0xc0,
+
+   .cache_type = REGCACHE_RBTREE,
+};
+
+static int hmc5843_spi_probe(struct spi_device *spi)
+{
+   struct hmc5843_data *data;
+   struct iio_dev *indio_dev;
+   int ret;
+
+   indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*data));
+   if (indio_dev == NULL)
+   return -ENOMEM;
+
+   spi->mode = SPI_MODE_3;
+   spi->max_speed_hz = 800;
+   spi->bits_per_word = 8;
+   ret = spi_setup(spi);
+   if (ret)
+   return ret;
+
+   spi_set_drvdata(spi, indio_dev);
+
+   data = iio_priv(indio_dev);
+   data->dev = &spi->dev;
+   data->regmap = devm_regmap_init_spi(spi, &hmc5843_spi_regmap_config);
+
+   indio_dev->dev.parent = &spi->dev;
+
+   return hmc5843_common_probe(indio_dev, HMC5983_ID);
+}
+
+static int hmc5843_spi_remove(struct spi_device *spi)
+{
+   struct iio_dev *indio_dev = spi_get_drvdata(spi);
+   return hmc5843_common_remove(indio_dev);
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int hmc5843_spi_suspend(struct device *dev)
+{
+   return hmc5843_common_suspend(spi_get_drvdata(to_spi_device(dev)));
+}
+
+static int hmc5843_spi_resume(struct device *dev)
+{
+   return hmc5843_common_resume(spi_get_drvdata(to_spi_device(dev)));
+}
+
+static SIMPLE_DEV_PM_OPS(hmc5843_pm_ops,
+   hmc5843_spi_suspend, hmc5843_spi_resume);
+#define HMC5843_PM_OPS (&hmc5843_pm_ops)
+#else
+#define HMC5843_PM_OPS NULL
+#endif
+
+
+static const struct spi_device_id hmc5843_id[] = {
+   { "hmc5983", HMC5983_ID },
+   { }
+};
+
+static struct spi_driver hmc5843_driver = {
+   .driver = {
+   .name = "hmc5843",
+   .pm = HMC5843_PM_OPS,
+   .owner = THIS_MODULE,
+   },
+   .id_table = hmc5843_id,
+   .probe = hmc5843_spi_probe,
+   .remove = hmc5843_spi_remove,
+};
+
+mod

[PATCH 0/2] Drivers: hv

2014-07-07 Thread K. Y. Srinivasan
This patch set fixes a bug in the VMBUS driver that dispatches driver specific
callback as well as a bug in the KVP code.

K. Y. Srinivasan (2):
  Drivers: hv: vmbus: Fix a bug in the channel callback dispatch code
  Drivers: hv: util: Fix a bug in the KVP code

 drivers/hv/connection.c |8 ++--
 drivers/hv/hv_kvp.c |   17 ++---
 drivers/hv/hv_util.c|2 +-
 3 files changed, 21 insertions(+), 6 deletions(-)

-- 
1.7.4.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/2] Drivers: hv: vmbus: Fix a bug in the channel callback dispatch code

2014-07-07 Thread K. Y. Srinivasan
Starting with Win8, we have implemented several optimizations to improve the
scalability and performance of the VMBUS transport between the Host and the
Guest. Some of the non-performance critical services cannot leverage these
optimization since they only read and process one message at a time.
Make adjustments to the callback dispatch code to account for the way
non-performance critical drivers handle reading of the channel.

Signed-off-by: K. Y. Srinivasan 
Cc: 
---
 drivers/hv/connection.c |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/hv/connection.c b/drivers/hv/connection.c
index e84f452..ae22e3c 100644
--- a/drivers/hv/connection.c
+++ b/drivers/hv/connection.c
@@ -339,9 +339,13 @@ static void process_chn_event(u32 relid)
 */
 
do {
-   hv_begin_read(&channel->inbound);
+   if (read_state)
+   hv_begin_read(&channel->inbound);
channel->onchannel_callback(arg);
-   bytes_to_read = hv_end_read(&channel->inbound);
+   if (read_state)
+   bytes_to_read = hv_end_read(&channel->inbound);
+   else
+   bytes_to_read = 0;
} while (read_state && (bytes_to_read != 0));
} else {
pr_err("no channel callback for relid - %u\n", relid);
-- 
1.7.4.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/2] Drivers: hv: util: Fix a bug in the KVP code

2014-07-07 Thread K. Y. Srinivasan
Add code to poll the channel since we process only one message
at a time and the host may not interrupt us. Also increase the
receive buffer size since some KVP messages are close to 8K bytes in size.

Signed-off-by: K. Y. Srinivasan 
Cc: 
---
 drivers/hv/hv_kvp.c  |   17 ++---
 drivers/hv/hv_util.c |2 +-
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/drivers/hv/hv_kvp.c b/drivers/hv/hv_kvp.c
index ea85253..521c146 100644
--- a/drivers/hv/hv_kvp.c
+++ b/drivers/hv/hv_kvp.c
@@ -127,6 +127,17 @@ kvp_work_func(struct work_struct *dummy)
kvp_respond_to_host(NULL, HV_E_FAIL);
 }
 
+static void poll_channel(struct vmbus_channel *channel)
+{
+   if (channel->target_cpu != smp_processor_id())
+   smp_call_function_single(channel->target_cpu,
+hv_kvp_onchannelcallback,
+channel, true);
+   else
+   hv_kvp_onchannelcallback(channel);
+}
+
+
 static int kvp_handle_handshake(struct hv_kvp_msg *msg)
 {
int ret = 1;
@@ -155,7 +166,7 @@ static int kvp_handle_handshake(struct hv_kvp_msg *msg)
kvp_register(dm_reg_value);
kvp_transaction.active = false;
if (kvp_transaction.kvp_context)
-   hv_kvp_onchannelcallback(kvp_transaction.kvp_context);
+   poll_channel(kvp_transaction.kvp_context);
}
return ret;
 }
@@ -568,7 +579,7 @@ response_done:
 
vmbus_sendpacket(channel, recv_buffer, buf_len, req_id,
VM_PKT_DATA_INBAND, 0);
-
+   poll_channel(channel);
 }
 
 /*
@@ -603,7 +614,7 @@ void hv_kvp_onchannelcallback(void *context)
return;
}
 
-   vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 2, &recvlen,
+   vmbus_recvpacket(channel, recv_buffer, PAGE_SIZE * 4, &recvlen,
 &requestid);
 
if (recvlen > 0) {
diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c
index dd76180..3b9c9ef 100644
--- a/drivers/hv/hv_util.c
+++ b/drivers/hv/hv_util.c
@@ -319,7 +319,7 @@ static int util_probe(struct hv_device *dev,
(struct hv_util_service *)dev_id->driver_data;
int ret;
 
-   srv->recv_buffer = kmalloc(PAGE_SIZE * 2, GFP_KERNEL);
+   srv->recv_buffer = kmalloc(PAGE_SIZE * 4, GFP_KERNEL);
if (!srv->recv_buffer)
return -ENOMEM;
if (srv->util_init) {
-- 
1.7.4.1

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 3/5] staging:nvec: Add missing blank line after declarations.

2014-07-07 Thread Guillaume Clement
Signed-off-by: Guillaume Clément 
---
 drivers/staging/nvec/nvec_paz00.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/nvec/nvec_paz00.c 
b/drivers/staging/nvec/nvec_paz00.c
index 934b796..e2e675a 100644
--- a/drivers/staging/nvec/nvec_paz00.c
+++ b/drivers/staging/nvec/nvec_paz00.c
@@ -35,6 +35,7 @@ static void nvec_led_brightness_set(struct led_classdev 
*led_cdev,
 {
struct nvec_led *led = to_nvec_led(led_cdev);
unsigned char buf[] = NVEC_LED_REQ;
+
buf[4] = value;
 
nvec_write_async(led->nvec, buf, sizeof(buf));
-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 2/5] staging:nvec: Remove unnessary out of memory message.

2014-07-07 Thread Guillaume Clement
Logging messages that show some type of "out of memory" error
are generally unnecessary as there is a generic message and
a stack dump done by the memory subsystem.

Signed-off-by: Guillaume Clément 
---
 drivers/staging/nvec/nvec.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
index 8a3dd47..d325048 100644
--- a/drivers/staging/nvec/nvec.c
+++ b/drivers/staging/nvec/nvec.c
@@ -806,10 +806,9 @@ static int tegra_nvec_probe(struct platform_device *pdev)
}
 
nvec = devm_kzalloc(&pdev->dev, sizeof(struct nvec_chip), GFP_KERNEL);
-   if (nvec == NULL) {
-   dev_err(&pdev->dev, "failed to reserve memory\n");
+   if (nvec == NULL)
return -ENOMEM;
-   }
+
platform_set_drvdata(pdev, nvec);
nvec->dev = &pdev->dev;
 
-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 5/5] staging:nvec: Add missing blank line after declarations.

2014-07-07 Thread Guillaume Clement
Signed-off-by: Guillaume Clément 
---
 drivers/staging/nvec/nvec_ps2.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/drivers/staging/nvec/nvec_ps2.c b/drivers/staging/nvec/nvec_ps2.c
index 45b2f13..f56f1db 100644
--- a/drivers/staging/nvec/nvec_ps2.c
+++ b/drivers/staging/nvec/nvec_ps2.c
@@ -53,12 +53,14 @@ static struct nvec_ps2 ps2_dev;
 static int ps2_startstreaming(struct serio *ser_dev)
 {
unsigned char buf[] = { NVEC_PS2, AUTO_RECEIVE_N, PACKET_SIZE };
+
return nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }
 
 static void ps2_stopstreaming(struct serio *ser_dev)
 {
unsigned char buf[] = { NVEC_PS2, CANCEL_AUTO_RECEIVE };
+
nvec_write_async(ps2_dev.nvec, buf, sizeof(buf));
 }
 
-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 4/5] staging:nvec: Add missing blank line after declarations.

2014-07-07 Thread Guillaume Clement
Signed-off-by: Guillaume Clément 
---
 drivers/staging/nvec/nvec_power.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/staging/nvec/nvec_power.c 
b/drivers/staging/nvec/nvec_power.c
index aacfcd6..6446e15 100644
--- a/drivers/staging/nvec/nvec_power.c
+++ b/drivers/staging/nvec/nvec_power.c
@@ -226,6 +226,7 @@ static int nvec_power_get_property(struct power_supply *psy,
   union power_supply_propval *val)
 {
struct nvec_power *power = dev_get_drvdata(psy->dev->parent);
+
switch (psp) {
case POWER_SUPPLY_PROP_ONLINE:
val->intval = power->on;
-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH 1/5] staging:nvec: Fix "unnecessary else" coding style warning.

2014-07-07 Thread Guillaume Clement
The last else is unnessary as all the if statements end with a return.

Signed-off-by: Guillaume Clément 
---
 drivers/staging/nvec/nvec.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/nvec/nvec.c b/drivers/staging/nvec/nvec.c
index 90f1c4d..8a3dd47 100644
--- a/drivers/staging/nvec/nvec.c
+++ b/drivers/staging/nvec/nvec.c
@@ -232,8 +232,7 @@ static size_t nvec_msg_size(struct nvec_msg *msg)
return 2;
else if (event_length == NVEC_3BYTES)
return 3;
-   else
-   return 0;
+   return 0;
 }
 
 /**
-- 
1.8.5.5

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging:nvec: Fix several coding style warnings

2014-07-07 Thread Guillaume Clement
This fixes several warnings in the nvec staging driver.

___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH 1/1] staging: android: logger: fixes not useful "else" warnings This patch fixes WARNING: else is not generally useful after a break or return

2014-07-07 Thread Greg Kroah-Hartman
Your subject has the info that should be here in the body of the
changelog entry.


On Fri, Jul 04, 2014 at 12:09:23AM +0800, kinka wrote:
> Signed-off-by: kinka 

I need a "real" name for any kernel submission, please read
Documentation/SubmittingPatches for the details.

also, someone just sent this same change in before you, sorry.

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [GIT PULL] component fix

2014-07-07 Thread Greg Kroah-Hartman
On Sat, Jul 05, 2014 at 10:51:02AM +0100, Russell King wrote:
> Greg,
> 
> Please incorporate a fix for the component helper, which can be found at:
> 
>   git://ftp.arm.linux.org.uk/~rmk/linux-arm.git component-for-driver
> 
> with SHA1 b509cc802239a8b5ba7d1d2cc5adfb9d984b7ed8.
> 
> This fixes a bug reported by Sachin Kamat found with Exynos DRM.

Pulled and pushed out, thanks.

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [GIT PULL] imx-drm update for component changes

2014-07-07 Thread Greg Kroah-Hartman
On Sat, Jul 05, 2014 at 10:55:24AM +0100, Russell King wrote:
> Greg,
> 
> Please incorporate the imx-drm update for component changes, which can
> be found at:
> 
>   git://ftp.arm.linux.org.uk/~rmk/linux-arm.git component-for-staging
> 
> with SHA1 9e5e2ffda320bacb761e4812e3ef7a7decd592a9.
> 
> This updates imx-drm for the recently merged updates to the component
> helper, and as such is based upon the previously pulled updates
> (including the recent fix) into the the driver tree.

Pulled and pushed out, thanks.

It would be nice if you could use signed tags for pull requests, it's a
pain to verify a sha1 as I can't pull it directly :(

thanks,

greg k-h
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2 2/4] Staging: rts5208: Replace custom macro with print_hex_dump_bytes

2014-07-07 Thread micky

On 07/07/2014 03:10 PM, Fabio Falzoi wrote:

Use print_hex_dump_bytes to have memory properly dumped only when
DEBUG is defined.

Signed-off-by: Fabio Falzoi 
---
  drivers/staging/rts5208/ms.c|  4 ++--
  drivers/staging/rts5208/rtsx_chip.c |  4 ++--
  drivers/staging/rts5208/rtsx_scsi.c |  9 -
  drivers/staging/rts5208/sd.c|  6 +++---
  drivers/staging/rts5208/trace.h | 10 +-
  5 files changed, 16 insertions(+), 17 deletions(-)

diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c
index 2476d22..0a33043 100644
--- a/drivers/staging/rts5208/ms.c
+++ b/drivers/staging/rts5208/ms.c
@@ -307,7 +307,7 @@ static int ms_read_bytes(struct rtsx_chip *chip,
  
  	if ((tpc == PRO_READ_SHORT_DATA) && (data_len == 8)) {

pr_debug("Read format progress:\n");
-   RTSX_DUMP(ptr, cnt);
+   rtsx_hex_dump(ptr, cnt);
}
  
  	return STATUS_SUCCESS;

@@ -1910,7 +1910,7 @@ RE_SEARCH:
ptr = rtsx_get_cmd_data(chip);
  
  	pr_debug("Boot block data:\n");

-   RTSX_DUMP(ptr, 16);
+   rtsx_hex_dump(ptr, 16);
  
  	/* Block ID error

 * HEADER_ID0, HEADER_ID1
diff --git a/drivers/staging/rts5208/rtsx_chip.c 
b/drivers/staging/rts5208/rtsx_chip.c
index 8f447ef..761e83c 100644
--- a/drivers/staging/rts5208/rtsx_chip.c
+++ b/drivers/staging/rts5208/rtsx_chip.c
@@ -1299,8 +1299,8 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8 func, 
u16 addr, u8 *buf,
}
}
  
-	RTSX_DUMP(mask, dw_len * 4);

-   RTSX_DUMP(data, dw_len * 4);
+   rtsx_hex_dump(mask, dw_len * 4);
+   rtsx_hex_dump(data, dw_len * 4);
  
  	for (i = 0; i < dw_len; i++) {

retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i * 4,
diff --git a/drivers/staging/rts5208/rtsx_scsi.c 
b/drivers/staging/rts5208/rtsx_scsi.c
index fd3c2e7..8269a02 100644
--- a/drivers/staging/rts5208/rtsx_scsi.c
+++ b/drivers/staging/rts5208/rtsx_scsi.c
@@ -40,7 +40,8 @@
  void scsi_show_command(struct scsi_cmnd *srb)
  {
char *what = NULL;
-   int i, unknown_cmd = 0;
+   int unknown_cmd = 0;
+   size_t len;
  
  	switch (srb->cmnd[0]) {

case TEST_UNIT_READY:
@@ -319,10 +320,8 @@ void scsi_show_command(struct scsi_cmnd *srb)
pr_debug("Command %s (%d bytes)\n", what, srb->cmd_len);
  
  	if (unknown_cmd) {

-   pr_debug("");
-   for (i = 0; i < srb->cmd_len && i < 16; i++)
-   pr_debug(" %02x", srb->cmnd[i]);
-   pr_debug("\n");
+   len = min_t(size_t, srb->cmd_len, 16);
+   rtsx_hex_dump(srb->cmnd, len);
}
  }
  
diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c

index 96acd39..2f50f9c 100644
--- a/drivers/staging/rts5208/sd.c
+++ b/drivers/staging/rts5208/sd.c
@@ -426,7 +426,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char 
check_wp)
memcpy(sd_card->raw_csd, rsp + 1, 15);
  
  	pr_debug("CSD Response:\n");

-   RTSX_DUMP(sd_card->raw_csd, 16);
+   rtsx_hex_dump(sd_card->raw_csd, 16);
  
  	csd_ver = (rsp[1] & 0xc0) >> 6;

pr_debug("csd_ver = %d\n", csd_ver);
@@ -1059,7 +1059,7 @@ static int sd_check_switch_mode(struct rtsx_chip *chip, 
u8 mode,
TRACE_RET(chip, STATUS_FAIL);
}
  
-	RTSX_DUMP(buf, 64);

+   rtsx_hex_dump(buf, 64);
  
  	if (func_group == NO_ARGUMENT) {

sd_card->func_group1_mask = buf[0x0D];
@@ -2107,7 +2107,7 @@ static int sd_check_wp_state(struct rtsx_chip *chip)
}
  
  	pr_debug("ACMD13:\n");

-   RTSX_DUMP(buf, 64);
+   rtsx_hex_dump(buf, 64);
  
  	sd_card_type = ((u16)buf[2] << 8) | buf[3];

pr_debug("sd_card_type = 0x%04x\n", sd_card_type);
diff --git a/drivers/staging/rts5208/trace.h b/drivers/staging/rts5208/trace.h
index 7fcb459..8386a20 100644
--- a/drivers/staging/rts5208/trace.h
+++ b/drivers/staging/rts5208/trace.h
@@ -82,12 +82,12 @@ static inline char *filename(char *path)
  #define TRACE_GOTO(chip, label)   goto label
  #endif
  
-#ifdef CONFIG_RTS5208_DEBUG

-#define RTSX_DUMP(buf, buf_len)\
-   print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": ",   \
-  DUMP_PREFIX_NONE, 16, 1, (buf), (buf_len), false)
+#ifdef DEBUG
+#define rtsx_hex_dump(buf, len)\
+   print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, buf, len)
  #else
-#define RTSX_DUMP(buf, buf_len)
+#define rtsx_hex_dump(buf, len)\
+   do {;}while(0)

Hi,
here exist some checkpatch errors.

Best Regards.
micky.

  #endif
  
  #endif  /* __REALTEK_RTSX_TRACE_H */


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2 4/4] Staging: rts5208: Fix a format specifier for dev_err

2014-07-07 Thread micky

On 07/07/2014 03:10 PM, Fabio Falzoi wrote:

Fix an incorrect use of the %d format specifier in dev_err that caused a
warning.

Signed-off-by: Fabio Falzoi 
---
  drivers/staging/rts5208/rtsx.c | 4 ++--
  1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rts5208/rtsx.c b/drivers/staging/rts5208/rtsx.c
index 4f5f7a3..9aae7ac 100644
--- a/drivers/staging/rts5208/rtsx.c
+++ b/drivers/staging/rts5208/rtsx.c
@@ -463,14 +463,14 @@ static int rtsx_control_thread(void *__dev)
 * the maximum known LUN
 */
else if (chip->srb->device->id) {
-   dev_err(&dev->pci->dev, "Bad target number (%d:%d)\n",
+   dev_err(&dev->pci->dev, "Bad target number (%d:%llu)\n",

here exist some compile warning.
drivers/staging/rts5208/rtsx.c:468:5: warning: format ‘%llu’ expects 
argument of type ‘long long unsigned int’, but argument 4 has type 
‘unsigned int’ [-Wformat]



chip->srb->device->id,
chip->srb->device->lun);
chip->srb->result = DID_BAD_TARGET << 16;
}
  
  		else if (chip->srb->device->lun > chip->max_lun) {

-   dev_err(&dev->pci->dev, "Bad LUN (%d:%d)\n",
+   dev_err(&dev->pci->dev, "Bad LUN (%d:%llu)\n",
chip->srb->device->id,
chip->srb->device->lun);
chip->srb->result = DID_BAD_TARGET << 16;


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


[PATCH] staging: rtl8192u: fix checkpatch error/warning in r819xU_phy.c

2014-07-07 Thread sanjeev sharma
From: sanjeevs1 

This is a patch to the r819xU_phy.c file that fixes up all the Error/Warning 
found by the checkpatch.pl tool

Signed-off-by: Sanjeev Sharma 
---
 drivers/staging/rtl8192u/r819xU_phy.c | 76 +--
 1 file changed, 36 insertions(+), 40 deletions(-)

diff --git a/drivers/staging/rtl8192u/r819xU_phy.c 
b/drivers/staging/rtl8192u/r819xU_phy.c
index 02554c9..1dd1c1e 100644
--- a/drivers/staging/rtl8192u/r819xU_phy.c
+++ b/drivers/staging/rtl8192u/r819xU_phy.c
@@ -101,16 +101,15 @@ void rtl8192_setBBreg(struct net_device *dev, u32 
reg_addr, u32 bitmask,
} else {
write_nic_dword(dev, reg_addr, data);
}
-   return;
 }
 
 /**
  * function:  This function reads specific bits from BB register
  * input: net_device   *dev
- *u32  reg_addr   //target addr to be readback
- *u32  bitmask//taget bit pos to be readback
- * output:none
- * return:u32  data   //the readback register value
+ * u32 reg_addr   //target addr to be readback
+ * u32 bitmask//taget bit pos to be readback
+ * output: none
+ * return: u32 data   //the readback register value
  * notice:
  
**/
 u32 rtl8192_QueryBBReg(struct net_device *dev, u32 reg_addr, u32 bitmask)
@@ -192,7 +191,7 @@ static u32 rtl8192_phy_RFSerialRead(struct net_device *dev,
 
 
/* TODO: we should not delay such a long time. Ask for help from SD3 */
-   usleep_range(1000, 1000);
+   usleep_range(1000, 2000);
 
ret = rtl8192_QueryBBReg(dev, pPhyReg->rfLSSIReadBack,
 bLSSIReadBackData);
@@ -281,7 +280,6 @@ static void rtl8192_phy_RFSerialWrite(struct net_device 
*dev,
 priv->RfReg0Value[eRFPath] << 16);
}
}
-   return;
 }
 
 /**
@@ -332,7 +330,6 @@ void rtl8192_phy_SetRFReg(struct net_device *dev, 
RF90_RADIO_PATH_E eRFPath,
rtl8192_phy_RFSerialWrite(dev, eRFPath, reg_addr, data);
}
}
-   return;
 }
 
 /**
@@ -481,9 +478,9 @@ static void phy_FwRFSerialWrite(struct net_device *dev,
 /**
  * function:  This function reads BB parameters from header file we generate,
  *and do register read/write
- * input: net_device   *dev
- * output:none
- * return:none
+ * input:  net_device  *dev
+ * output: none
+ * return: none
  * notice:BB parameters may change all the time, so please make
  *sure it has been synced with the newest.
  */
@@ -513,7 +510,6 @@ void rtl8192_phy_configmac(struct net_device *dev)
rtl8192_setBBreg(dev, pdwArray[i], pdwArray[i+1],
 pdwArray[i+2]);
}
-   return;
 }
 
 /**
@@ -559,7 +555,6 @@ void rtl8192_phyConfigBB(struct net_device *dev, u8 
ConfigType)
 rtl819XAGCTAB_Array[i+1]);
}
}
-   return;
 }
 
 /**
@@ -746,11 +741,11 @@ u8 rtl8192_phy_checkBBAndRF(struct net_device *dev, 
HW90_BLOCK_E CheckBlock,
 bMask12Bits, WriteData[i]);
/* TODO: we should not delay for such a long time.
   Ask SD3 */
-   usleep_range(1000, 1000);
+   usleep_range(1000, 2000);
reg = rtl8192_phy_QueryRFReg(dev, eRFPath,
 WriteAddr[HW90_BLOCK_RF],
 bMask12Bits);
-   usleep_range(1000, 1000);
+   usleep_range(1000, 2000);
break;
 
default:
@@ -846,7 +841,6 @@ static void rtl8192_BB_Config_ParaFile(struct net_device 
*dev)
priv->bCckHighPower = (u8)rtl8192_QueryBBReg(dev,
 rFPGA0_XA_HSSIParameter2,
 0x200);
-   return;
 }
 
 /**
@@ -864,7 +858,6 @@ void rtl8192_BBConfig(struct net_device *dev)
 * implemented, so use file first.
 * FIXME: should implement it for hardcode? */
rtl8192_BB_Config_Pa

Re: [PATCH v2 4/4] Staging: rts5208: Fix a format specifier for dev_err

2014-07-07 Thread Fabio Falzoi
Hi Micky,

in the latest linux-tree sources, lun field in struct scsi_device from
include/scsi/scsi_device.h is a u64:

unsigned int id, channel;
u64 lun;
unsigned int manufacturer;

so we get a compiler warning if we keep the %u specifier.

Regards,
Fabio

On Tue, Jul 8, 2014 at 4:13 AM, micky  wrote:
> On 07/07/2014 03:10 PM, Fabio Falzoi wrote:
>>
>> Fix an incorrect use of the %d format specifier in dev_err that caused a
>> warning.
>>
>> Signed-off-by: Fabio Falzoi 
>> ---
>>   drivers/staging/rts5208/rtsx.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/staging/rts5208/rtsx.c
>> b/drivers/staging/rts5208/rtsx.c
>> index 4f5f7a3..9aae7ac 100644
>> --- a/drivers/staging/rts5208/rtsx.c
>> +++ b/drivers/staging/rts5208/rtsx.c
>> @@ -463,14 +463,14 @@ static int rtsx_control_thread(void *__dev)
>>  * the maximum known LUN
>>  */
>> else if (chip->srb->device->id) {
>> -   dev_err(&dev->pci->dev, "Bad target number
>> (%d:%d)\n",
>> +   dev_err(&dev->pci->dev, "Bad target number
>> (%d:%llu)\n",
>
> here exist some compile warning.
> drivers/staging/rts5208/rtsx.c:468:5: warning: format ‘%llu’ expects
> argument of type ‘long long unsigned int’, but argument 4 has type ‘unsigned
> int’ [-Wformat]
>
>
>> chip->srb->device->id,
>> chip->srb->device->lun);
>> chip->srb->result = DID_BAD_TARGET << 16;
>> }
>> else if (chip->srb->device->lun > chip->max_lun) {
>> -   dev_err(&dev->pci->dev, "Bad LUN (%d:%d)\n",
>> +   dev_err(&dev->pci->dev, "Bad LUN (%d:%llu)\n",
>> chip->srb->device->id,
>> chip->srb->device->lun);
>> chip->srb->result = DID_BAD_TARGET << 16;
>
>
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v2 2/4] Staging: rts5208: Replace custom macro with print_hex_dump_bytes

2014-07-07 Thread Fabio Falzoi
>
> Hi,
> here exist some checkpatch errors.
>
> Best Regards.
> micky.

Yes, you'are right, I'm gonna fix it, thanks.

On Tue, Jul 8, 2014 at 4:12 AM, micky  wrote:
> On 07/07/2014 03:10 PM, Fabio Falzoi wrote:
>>
>> Use print_hex_dump_bytes to have memory properly dumped only when
>> DEBUG is defined.
>>
>> Signed-off-by: Fabio Falzoi 
>> ---
>>   drivers/staging/rts5208/ms.c|  4 ++--
>>   drivers/staging/rts5208/rtsx_chip.c |  4 ++--
>>   drivers/staging/rts5208/rtsx_scsi.c |  9 -
>>   drivers/staging/rts5208/sd.c|  6 +++---
>>   drivers/staging/rts5208/trace.h | 10 +-
>>   5 files changed, 16 insertions(+), 17 deletions(-)
>>
>> diff --git a/drivers/staging/rts5208/ms.c b/drivers/staging/rts5208/ms.c
>> index 2476d22..0a33043 100644
>> --- a/drivers/staging/rts5208/ms.c
>> +++ b/drivers/staging/rts5208/ms.c
>> @@ -307,7 +307,7 @@ static int ms_read_bytes(struct rtsx_chip *chip,
>> if ((tpc == PRO_READ_SHORT_DATA) && (data_len == 8)) {
>> pr_debug("Read format progress:\n");
>> -   RTSX_DUMP(ptr, cnt);
>> +   rtsx_hex_dump(ptr, cnt);
>> }
>> return STATUS_SUCCESS;
>> @@ -1910,7 +1910,7 @@ RE_SEARCH:
>> ptr = rtsx_get_cmd_data(chip);
>> pr_debug("Boot block data:\n");
>> -   RTSX_DUMP(ptr, 16);
>> +   rtsx_hex_dump(ptr, 16);
>> /* Block ID error
>>  * HEADER_ID0, HEADER_ID1
>> diff --git a/drivers/staging/rts5208/rtsx_chip.c
>> b/drivers/staging/rts5208/rtsx_chip.c
>> index 8f447ef..761e83c 100644
>> --- a/drivers/staging/rts5208/rtsx_chip.c
>> +++ b/drivers/staging/rts5208/rtsx_chip.c
>> @@ -1299,8 +1299,8 @@ int rtsx_write_cfg_seq(struct rtsx_chip *chip, u8
>> func, u16 addr, u8 *buf,
>> }
>> }
>>   - RTSX_DUMP(mask, dw_len * 4);
>> -   RTSX_DUMP(data, dw_len * 4);
>> +   rtsx_hex_dump(mask, dw_len * 4);
>> +   rtsx_hex_dump(data, dw_len * 4);
>> for (i = 0; i < dw_len; i++) {
>> retval = rtsx_write_cfg_dw(chip, func, aligned_addr + i *
>> 4,
>> diff --git a/drivers/staging/rts5208/rtsx_scsi.c
>> b/drivers/staging/rts5208/rtsx_scsi.c
>> index fd3c2e7..8269a02 100644
>> --- a/drivers/staging/rts5208/rtsx_scsi.c
>> +++ b/drivers/staging/rts5208/rtsx_scsi.c
>> @@ -40,7 +40,8 @@
>>   void scsi_show_command(struct scsi_cmnd *srb)
>>   {
>> char *what = NULL;
>> -   int i, unknown_cmd = 0;
>> +   int unknown_cmd = 0;
>> +   size_t len;
>> switch (srb->cmnd[0]) {
>> case TEST_UNIT_READY:
>> @@ -319,10 +320,8 @@ void scsi_show_command(struct scsi_cmnd *srb)
>> pr_debug("Command %s (%d bytes)\n", what, srb->cmd_len);
>> if (unknown_cmd) {
>> -   pr_debug("");
>> -   for (i = 0; i < srb->cmd_len && i < 16; i++)
>> -   pr_debug(" %02x", srb->cmnd[i]);
>> -   pr_debug("\n");
>> +   len = min_t(size_t, srb->cmd_len, 16);
>> +   rtsx_hex_dump(srb->cmnd, len);
>> }
>>   }
>>   diff --git a/drivers/staging/rts5208/sd.c b/drivers/staging/rts5208/sd.c
>> index 96acd39..2f50f9c 100644
>> --- a/drivers/staging/rts5208/sd.c
>> +++ b/drivers/staging/rts5208/sd.c
>> @@ -426,7 +426,7 @@ static int sd_check_csd(struct rtsx_chip *chip, char
>> check_wp)
>> memcpy(sd_card->raw_csd, rsp + 1, 15);
>> pr_debug("CSD Response:\n");
>> -   RTSX_DUMP(sd_card->raw_csd, 16);
>> +   rtsx_hex_dump(sd_card->raw_csd, 16);
>> csd_ver = (rsp[1] & 0xc0) >> 6;
>> pr_debug("csd_ver = %d\n", csd_ver);
>> @@ -1059,7 +1059,7 @@ static int sd_check_switch_mode(struct rtsx_chip
>> *chip, u8 mode,
>> TRACE_RET(chip, STATUS_FAIL);
>> }
>>   - RTSX_DUMP(buf, 64);
>> +   rtsx_hex_dump(buf, 64);
>> if (func_group == NO_ARGUMENT) {
>> sd_card->func_group1_mask = buf[0x0D];
>> @@ -2107,7 +2107,7 @@ static int sd_check_wp_state(struct rtsx_chip *chip)
>> }
>> pr_debug("ACMD13:\n");
>> -   RTSX_DUMP(buf, 64);
>> +   rtsx_hex_dump(buf, 64);
>> sd_card_type = ((u16)buf[2] << 8) | buf[3];
>> pr_debug("sd_card_type = 0x%04x\n", sd_card_type);
>> diff --git a/drivers/staging/rts5208/trace.h
>> b/drivers/staging/rts5208/trace.h
>> index 7fcb459..8386a20 100644
>> --- a/drivers/staging/rts5208/trace.h
>> +++ b/drivers/staging/rts5208/trace.h
>> @@ -82,12 +82,12 @@ static inline char *filename(char *path)
>>   #define TRACE_GOTO(chip, label)   goto label
>>   #endif
>>   -#ifdef CONFIG_RTS5208_DEBUG
>> -#define RTSX_DUMP(buf, buf_len)\
>> -   print_hex_dump(KERN_DEBUG, KBUILD_MODNAME ": ", \
>> -  DUMP_PREFIX_NONE, 16, 1, (buf), (buf_len), false)
>> +#ifdef DEBUG
>> +#define rtsx_hex_dump(buf, len)\
>> +   print_hex_dump_bytes(KBUILD_MODNAME ": ", DUMP_PREFIX_NONE, buf,
>> len)
>>   #else
>> -#d

[PATCH] staging: wlan-ng: Use net_device_stats from struct net_device

2014-07-07 Thread Tobias Klauser
Instead of using an own copy of struct net_device_stats in struct
wlandevice, use stats from struct net_device. Also remove the thus
unnecessary .ndo_get_stats function, as it would now just return
netdev->stats, which is the default in dev_get_stats().

Furthermore, convert prefix increment of stats counters to the more
common postfix increment idiom.

Signed-off-by: Tobias Klauser 
---
 drivers/staging/wlan-ng/hfa384x_usb.c  | 18 +++
 drivers/staging/wlan-ng/p80211netdev.c | 40 ++
 drivers/staging/wlan-ng/p80211netdev.h |  1 -
 drivers/staging/wlan-ng/prism2sta.c|  2 +-
 4 files changed, 17 insertions(+), 44 deletions(-)

diff --git a/drivers/staging/wlan-ng/hfa384x_usb.c 
b/drivers/staging/wlan-ng/hfa384x_usb.c
index 07cee56..2f63e0c 100644
--- a/drivers/staging/wlan-ng/hfa384x_usb.c
+++ b/drivers/staging/wlan-ng/hfa384x_usb.c
@@ -3158,8 +3158,8 @@ static void hfa384x_usbin_callback(struct urb *urb)
 
/* Check for short packet */
if (urb->actual_length == 0) {
-   ++(wlandev->linux_stats.rx_errors);
-   ++(wlandev->linux_stats.rx_length_errors);
+   wlandev->netdev->stats.rx_errors++;
+   wlandev->netdev->stats.rx_length_errors++;
action = RESUBMIT;
}
break;
@@ -3169,7 +3169,7 @@ static void hfa384x_usbin_callback(struct urb *urb)
wlandev->netdev->name);
if (!test_and_set_bit(WORK_RX_HALT, &hw->usb_flags))
schedule_work(&hw->usb_work);
-   ++(wlandev->linux_stats.rx_errors);
+   wlandev->netdev->stats.rx_errors++;
action = ABORT;
break;
 
@@ -3180,12 +3180,12 @@ static void hfa384x_usbin_callback(struct urb *urb)
!timer_pending(&hw->throttle)) {
mod_timer(&hw->throttle, jiffies + THROTTLE_JIFFIES);
}
-   ++(wlandev->linux_stats.rx_errors);
+   wlandev->netdev->stats.rx_errors++;
action = ABORT;
break;
 
case -EOVERFLOW:
-   ++(wlandev->linux_stats.rx_over_errors);
+   wlandev->netdev->stats.rx_over_errors++;
action = RESUBMIT;
break;
 
@@ -3204,7 +3204,7 @@ static void hfa384x_usbin_callback(struct urb *urb)
default:
pr_debug("urb status=%d, transfer flags=0x%x\n",
 urb->status, urb->transfer_flags);
-   ++(wlandev->linux_stats.rx_errors);
+   wlandev->netdev->stats.rx_errors++;
action = RESUBMIT;
break;
}
@@ -3712,7 +3712,7 @@ static void hfa384x_usbout_callback(struct urb *urb)
if (!test_and_set_bit
(WORK_TX_HALT, &hw->usb_flags))
schedule_work(&hw->usb_work);
-   ++(wlandev->linux_stats.tx_errors);
+   wlandev->netdev->stats.tx_errors++;
break;
}
 
@@ -3728,7 +3728,7 @@ static void hfa384x_usbout_callback(struct urb *urb)
mod_timer(&hw->throttle,
  jiffies + THROTTLE_JIFFIES);
}
-   ++(wlandev->linux_stats.tx_errors);
+   wlandev->netdev->stats.tx_errors++;
netif_stop_queue(wlandev->netdev);
break;
}
@@ -3741,7 +3741,7 @@ static void hfa384x_usbout_callback(struct urb *urb)
default:
netdev_info(wlandev->netdev, "unknown urb->status=%d\n",
urb->status);
-   ++(wlandev->linux_stats.tx_errors);
+   wlandev->netdev->stats.tx_errors++;
break;
}   /* switch */
}
diff --git a/drivers/staging/wlan-ng/p80211netdev.c 
b/drivers/staging/wlan-ng/p80211netdev.c
index 00b186c..29afa57 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -92,7 +92,6 @@
 
 /* netdevice method functions */
 static int p80211knetdev_init(netdevice_t *netdev);
-static struct net_device_stats *p80211knetdev_get_stats(netdevice_t *netdev);
 static int p80211knetdev_open(netdevice_t *netdev);
 static int p80211knetdev_stop(netdevice_t *netdev);
 static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
@@ -134,30 +133,6 @@ static int p80211knetdev_init(netdevice_t *netdev)
 }
 
 /*
-* p80211knetdev_get_stats
-*
-* Statistics retrieval for linux netdevices.  H

[PATCH] staging: gdm72xx: Use net_device_stats from struct net_device

2014-07-07 Thread Tobias Klauser
Instead of using an own copy of struct net_device_stats in struct nic,
use stats from struct net_device. Also remove the thus unnecessary
.ndo_get_stats function, as it would now just return netdev->stats,
which is the default in dev_get_stats().

Signed-off-by: Tobias Klauser 
---
 drivers/staging/gdm72xx/gdm_wimax.c | 17 -
 drivers/staging/gdm72xx/gdm_wimax.h |  1 -
 2 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/staging/gdm72xx/gdm_wimax.c 
b/drivers/staging/gdm72xx/gdm_wimax.c
index 4148013..6f44798 100644
--- a/drivers/staging/gdm72xx/gdm_wimax.c
+++ b/drivers/staging/gdm72xx/gdm_wimax.c
@@ -359,8 +359,8 @@ int gdm_wimax_send_tx(struct sk_buff *skb, struct 
net_device *dev)
return ret;
}
 
-   nic->stats.tx_packets++;
-   nic->stats.tx_bytes += skb->len - HCI_HEADER_SIZE;
+   dev->stats.tx_packets++;
+   dev->stats.tx_bytes += skb->len - HCI_HEADER_SIZE;
kfree_skb(skb);
return ret;
 }
@@ -445,13 +445,6 @@ static int gdm_wimax_set_mac_addr(struct net_device *dev, 
void *p)
return 0;
 }
 
-static struct net_device_stats *gdm_wimax_stats(struct net_device *dev)
-{
-   struct nic *nic = netdev_priv(dev);
-
-   return &nic->stats;
-}
-
 static int gdm_wimax_open(struct net_device *dev)
 {
struct nic *nic = netdev_priv(dev);
@@ -707,7 +700,6 @@ static int gdm_wimax_get_prepared_info(struct net_device 
*dev, char *buf,
 
 static void gdm_wimax_netif_rx(struct net_device *dev, char *buf, int len)
 {
-   struct nic *nic = netdev_priv(dev);
struct sk_buff *skb;
int ret;
 
@@ -720,8 +712,8 @@ static void gdm_wimax_netif_rx(struct net_device *dev, char 
*buf, int len)
}
skb_reserve(skb, 2);
 
-   nic->stats.rx_packets++;
-   nic->stats.rx_bytes += len;
+   dev->stats.rx_packets++;
+   dev->stats.rx_bytes += len;
 
memcpy(skb_put(skb, len), buf, len);
 
@@ -877,7 +869,6 @@ static struct net_device_ops gdm_netdev_ops = {
.ndo_stop   = gdm_wimax_close,
.ndo_set_config = gdm_wimax_set_config,
.ndo_start_xmit = gdm_wimax_tx,
-   .ndo_get_stats  = gdm_wimax_stats,
.ndo_set_mac_address= gdm_wimax_set_mac_addr,
.ndo_do_ioctl   = gdm_wimax_ioctl,
 };
diff --git a/drivers/staging/gdm72xx/gdm_wimax.h 
b/drivers/staging/gdm72xx/gdm_wimax.h
index 7e2c888..798dcc3 100644
--- a/drivers/staging/gdm72xx/gdm_wimax.h
+++ b/drivers/staging/gdm72xx/gdm_wimax.h
@@ -46,7 +46,6 @@ struct phy_dev {
 struct nic {
struct net_device   *netdev;
struct phy_dev  *phy_dev;
-   struct net_device_stats stats;
struct data_s   sdk_data[SIOC_DATA_MAX];
 #if defined(CONFIG_WIMAX_GDM72XX_QOS)
struct qos_cb_s qos;
-- 
2.0.1


___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel