Re: [PATCH] Maxim/driver: Add driver for maxim ds26522

2016-06-24 Thread David Miller
From: Qiang Zhao <qiang.z...@nxp.com>
Date: Fri, 24 Jun 2016 02:00:33 +

> On Thu, 2016-06-23 at 10:59PM, David Miller wrote:
>> -Original Message-
>> From: David Miller [mailto:da...@davemloft.net]
>> Sent: Thursday, June 23, 2016 10:59 PM
>> To: Qiang Zhao <qiang.z...@nxp.com>
>> Cc: o...@buserror.net; linux-ker...@vger.kernel.org; netdev@vger.kernel.org;
>> Xiaobo Xie <xiaobo....@nxp.com>
>> Subject: Re: [PATCH] Maxim/driver: Add driver for maxim ds26522
>> 
>> From: Zhao Qiang <qiang.z...@nxp.com>
>> Date: Thu, 23 Jun 2016 09:09:45 +0800
>> 
>> > +MODULE_DESCRIPTION(DRV_DESC);
>> 
>> There is no definition of DRV_DESC, so this makes it look like you didn't 
>> even
>> compile this driver.
> 
> I really, really compiled this driver.
> Thank you for your review and comments. I will modify it the next version.
> 
> [zhaoqiang@titan:~/upstream/linux]$ll drivers/net/wan/slic_ds26522.o
> -rw-r--r-- 1 zhaoqiang klocwork 153288 Jun 22 15:48 
> drivers/net/wan/slic_ds26522.o
> [zhaoqiang@titan:~/upstream/linux]$date

Obviously with the driver not configured as a module, and thus explicitly
not testing the failing statement at all.


RE: [PATCH] Maxim/driver: Add driver for maxim ds26522

2016-06-23 Thread Qiang Zhao
On Thu, 2016-06-23 at 10:59PM, David Miller wrote:
> -Original Message-
> From: David Miller [mailto:da...@davemloft.net]
> Sent: Thursday, June 23, 2016 10:59 PM
> To: Qiang Zhao <qiang.z...@nxp.com>
> Cc: o...@buserror.net; linux-ker...@vger.kernel.org; netdev@vger.kernel.org;
> Xiaobo Xie <xiaobo....@nxp.com>
> Subject: Re: [PATCH] Maxim/driver: Add driver for maxim ds26522
> 
> From: Zhao Qiang <qiang.z...@nxp.com>
> Date: Thu, 23 Jun 2016 09:09:45 +0800
> 
> > +MODULE_DESCRIPTION(DRV_DESC);
> 
> There is no definition of DRV_DESC, so this makes it look like you didn't even
> compile this driver.

I really, really compiled this driver.
Thank you for your review and comments. I will modify it the next version.

[zhaoqiang@titan:~/upstream/linux]$ll drivers/net/wan/slic_ds26522.o
-rw-r--r-- 1 zhaoqiang klocwork 153288 Jun 22 15:48 
drivers/net/wan/slic_ds26522.o
[zhaoqiang@titan:~/upstream/linux]$date
Fri Jun 24 09:42:16 CST 2016

-Zhao Qiang
BR


Re: [PATCH] Maxim/driver: Add driver for maxim ds26522

2016-06-23 Thread David Miller
From: Zhao Qiang 
Date: Thu, 23 Jun 2016 09:09:45 +0800

> +MODULE_DESCRIPTION(DRV_DESC);

There is no definition of DRV_DESC, so this makes it look like
you didn't even compile this driver.


Re: [PATCH] Maxim/driver: Add driver for maxim ds26522

2016-06-22 Thread kbuild test robot
Hi,

[auto build test ERROR on net-next/master]
[also build test ERROR on next-20160622]
[cannot apply to v4.7-rc4]
[if your patch is applied to the wrong git tree, please drop us a note to help 
improve the system]

url:
https://github.com/0day-ci/linux/commits/Zhao-Qiang/Maxim-driver-Add-driver-for-maxim-ds26522/20160623-095007
config: i386-allmodconfig (attached as .config)
compiler: gcc-6 (Debian 6.1.1-1) 6.1.1 20160430
reproduce:
# save the attached .config to linux build tree
make ARCH=i386 

All error/warnings (new ones prefixed by >>):

   In file included from include/linux/module.h:18:0,
from drivers/net/wan/slic_ds26522.c:15:
>> drivers/net/wan/slic_ds26522.c:39:20: error: expected ',' or ';' before 
>> 'DRV_DESC'
MODULE_DESCRIPTION(DRV_DESC);
   ^
   include/linux/moduleparam.h:23:26: note: in definition of macro 
'__MODULE_INFO'
  = __stringify(tag) "=" info
 ^~~~
>> include/linux/module.h:218:42: note: in expansion of macro 'MODULE_INFO'
#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, 
_description)
 ^~~
>> drivers/net/wan/slic_ds26522.c:39:1: note: in expansion of macro 
>> 'MODULE_DESCRIPTION'
MODULE_DESCRIPTION(DRV_DESC);
^~

vim +39 drivers/net/wan/slic_ds26522.c

 9   * under  the terms of  the GNU General  Public License as published by 
the
10   * Free Software Foundation;  either version 2 of the  License, or (at 
your
11   * option) any later version.
12   */
13  
14  #include 
  > 15  #include 
16  #include 
17  #include 
18  #include 
19  #include 
20  #include 
21  #include 
22  #include 
23  #include 
24  #include 
25  #include 
26  #include 
27  #include "slic_ds26522.h"
28  
29  #define DRV_NAME "ds26522"
30  
31  #define SLIC_TRANS_LEN 1
32  #define SLIC_TWO_LEN 2
33  #define SLIC_THREE_LEN 3
34  
35  static struct spi_device *g_spi;
36  
37  MODULE_LICENSE("GPL");
38  MODULE_AUTHOR("Zhao Qiang");
  > 39  MODULE_DESCRIPTION(DRV_DESC);
40  
41  /* the read/write format of address is
42   * w/r|A13|A12|A11|A10|A9|A8|A7|A6|A5|A4|A3|A2|A1|A0|x

---
0-DAY kernel test infrastructureOpen Source Technology Center
https://lists.01.org/pipermail/kbuild-all   Intel Corporation


.config.gz
Description: Binary data


[PATCH] Maxim/driver: Add driver for maxim ds26522

2016-06-22 Thread Zhao Qiang
Signed-off-by: Zhao Qiang 
---
 drivers/net/wan/Kconfig|  10 ++
 drivers/net/wan/Makefile   |   1 +
 drivers/net/wan/slic_ds26522.c | 256 +
 drivers/net/wan/slic_ds26522.h | 134 +
 4 files changed, 401 insertions(+)
 create mode 100644 drivers/net/wan/slic_ds26522.c
 create mode 100644 drivers/net/wan/slic_ds26522.h

diff --git a/drivers/net/wan/Kconfig b/drivers/net/wan/Kconfig
index 9e314b7..bd3bf3f 100644
--- a/drivers/net/wan/Kconfig
+++ b/drivers/net/wan/Kconfig
@@ -291,6 +291,16 @@ config FSL_UCC_HDLC
  To compile this driver as a module, choose M here: the
  module will be called fsl_ucc_hdlc.
 
+config SLIC_DS26522
+   tristate "Slic Maxim ds26522 card support"
+   depends on SPI
+   help
+ This module initializes and configures the slic maxim card
+ in T1 or E1 mode.
+
+ To compile this driver as a module, choose M here: the
+ module will be called slic_ds26522.
+
 config DSCC4_PCISYNC
bool "Etinc PCISYNC features"
depends on DSCC4
diff --git a/drivers/net/wan/Makefile b/drivers/net/wan/Makefile
index 25fec40..73c2326 100644
--- a/drivers/net/wan/Makefile
+++ b/drivers/net/wan/Makefile
@@ -33,6 +33,7 @@ obj-$(CONFIG_PCI200SYN)   += pci200syn.o
 obj-$(CONFIG_PC300TOO) += pc300too.o
 obj-$(CONFIG_IXP4XX_HSS)   += ixp4xx_hss.o
 obj-$(CONFIG_FSL_UCC_HDLC) += fsl_ucc_hdlc.o
+obj-$(CONFIG_SLIC_DS26522) += slic_ds26522.o
 
 clean-files := wanxlfw.inc
 $(obj)/wanxl.o:$(obj)/wanxlfw.inc
diff --git a/drivers/net/wan/slic_ds26522.c b/drivers/net/wan/slic_ds26522.c
new file mode 100644
index 000..67fd8e7
--- /dev/null
+++ b/drivers/net/wan/slic_ds26522.c
@@ -0,0 +1,256 @@
+/*
+ * drivers/net/wan/slic_ds26522.c
+ *
+ * Copyright (C) 2016 Freescale Semiconductor, Inc.
+ *
+ * Author:Zhao Qiang
+ *
+ * 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.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include "slic_ds26522.h"
+
+#define DRV_NAME "ds26522"
+
+#define SLIC_TRANS_LEN 1
+#define SLIC_TWO_LEN 2
+#define SLIC_THREE_LEN 3
+
+static struct spi_device *g_spi;
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Zhao Qiang");
+MODULE_DESCRIPTION(DRV_DESC);
+
+/* the read/write format of address is
+ * w/r|A13|A12|A11|A10|A9|A8|A7|A6|A5|A4|A3|A2|A1|A0|x
+ */
+static void slic_write(struct spi_device *spi, u16 addr,
+  u8 data)
+{
+   u8 temp[3];
+
+   addr = bitrev16(addr) >> 1;
+   data = bitrev8(data);
+   temp[0] = (u8)((addr >> 8) & 0x7f);
+   temp[1] = (u8)(addr & 0xfe);
+   temp[2] = data;
+
+   /* write spi addr and value */
+   spi_write(spi, [0], SLIC_THREE_LEN);
+}
+
+static u8 slic_read(struct spi_device *spi, u16 addr)
+{
+   u8 temp[2];
+   u8 data;
+
+   addr = bitrev16(addr) >> 1;
+   temp[0] = (u8)(((addr >> 8) & 0x7f) | 0x80);
+   temp[1] = (u8)(addr & 0xfe);
+
+   spi_write_then_read(spi, [0], SLIC_TWO_LEN, ,
+   SLIC_TRANS_LEN);
+
+   data = bitrev8(data);
+   return data;
+}
+
+static bool get_slic_product_code(struct spi_device *spi)
+{
+   u8 device_id;
+
+   device_id = slic_read(spi, DS26522_IDR_ADDR);
+   if ((device_id & 0xf8) == 0x68)
+   return true;
+   else
+   return false;
+}
+
+static void ds26522_e1_spec_config(struct spi_device *spi)
+{
+   /* Receive E1 Mode, Framer Disabled */
+   slic_write(spi, DS26522_RMMR_ADDR, DS26522_RMMR_E1);
+
+   /* Transmit E1 Mode, Framer Disable */
+   slic_write(spi, DS26522_TMMR_ADDR, DS26522_TMMR_E1);
+
+   /* Receive E1 Mode Framer Enable */
+   slic_write(spi, DS26522_RMMR_ADDR,
+  slic_read(spi, DS26522_RMMR_ADDR) | DS26522_RMMR_FRM_EN);
+
+   /* Transmit E1 Mode Framer Enable */
+   slic_write(spi, DS26522_TMMR_ADDR,
+  slic_read(spi, DS26522_TMMR_ADDR) | DS26522_TMMR_FRM_EN);
+
+   /* RCR1, receive E1 B8zs & ESF */
+   slic_write(spi, DS26522_RCR1_ADDR,
+  DS26522_RCR1_E1_HDB3 | DS26522_RCR1_E1_CCS);
+
+   /* RSYSCLK=2.048MHz, RSYNC-Output */
+   slic_write(spi, DS26522_RIOCR_ADDR,
+  DS26522_RIOCR_2048KHZ | DS26522_RIOCR_RSIO_OUT);
+
+   /* TCR1 Transmit E1 b8zs */
+   slic_write(spi, DS26522_TCR1_ADDR, DS26522_TCR1_TB8ZS);
+
+   /* TSYSCLK=2.048MHz, TSYNC-Output */
+   slic_write(spi, DS26522_TIOCR_ADDR,
+  DS26522_TIOCR_2048KHZ | DS26522_TIOCR_TSIO_OUT);
+
+   /* Set E1TAF */
+