Change in osmo-ccid-firmware[master]: Support for sysmoOCTSIM NCN8025/SX1503 control

2019-02-26 Thread Kévin Redon
Kévin Redon has submitted this change and it was merged. ( 
https://gerrit.osmocom.org/13030 )

Change subject: Support for sysmoOCTSIM NCN8025/SX1503 control
..

Support for sysmoOCTSIM NCN8025/SX1503 control

This adds an I2C bit-banging layer, defines the four busses on the
sysmoOCTSIM and adds some high-level functions to control the NCN8025
for each SIM slot.

Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
---
M sysmoOCTSIM/gcc/Makefile
A sysmoOCTSIM/i2c_bitbang.c
A sysmoOCTSIM/i2c_bitbang.h
M sysmoOCTSIM/main.c
A sysmoOCTSIM/ncn8025.c
A sysmoOCTSIM/ncn8025.h
A sysmoOCTSIM/octsim_i2c.c
A sysmoOCTSIM/octsim_i2c.h
8 files changed, 440 insertions(+), 0 deletions(-)

Approvals:
  Jenkins Builder: Verified
  Kévin Redon: Looks good to me, approved



diff --git a/sysmoOCTSIM/gcc/Makefile b/sysmoOCTSIM/gcc/Makefile
index 572fb21..5e3c38c 100644
--- a/sysmoOCTSIM/gcc/Makefile
+++ b/sysmoOCTSIM/gcc/Makefile
@@ -70,6 +70,9 @@
 gcc/gcc/startup_same54.o \
 hal/src/hal_usb_device.o \
 main.o \
+i2c_bitbang.o \
+octsim_i2c.o \
+ncn8025.o \
 hpl/osc32kctrl/hpl_osc32kctrl.o \
 examples/driver_examples.o \
 driver_init.o \
@@ -108,6 +111,9 @@
 "gcc/gcc/startup_same54.o" \
 "hal/src/hal_usb_device.o" \
 "main.o" \
+"i2c_bitbang.o" \
+"octsim_i2c.o" \
+"ncn8025.o" \
 "hpl/osc32kctrl/hpl_osc32kctrl.o" \
 "examples/driver_examples.o" \
 "driver_init.o" \
@@ -152,6 +158,9 @@
 "hal/src/hal_usart_async.d" \
 "hpl/osc32kctrl/hpl_osc32kctrl.d" \
 "main.d" \
+"i2c_bitbang.d" \
+"octsim_i2c.d" \
+"ncn8025.d" \
 "examples/driver_examples.d" \
 "hal/src/hal_cache.d" \
 "hal/src/hal_sleep.d" \
diff --git a/sysmoOCTSIM/i2c_bitbang.c b/sysmoOCTSIM/i2c_bitbang.c
new file mode 100644
index 000..b1a9a62
--- /dev/null
+++ b/sysmoOCTSIM/i2c_bitbang.c
@@ -0,0 +1,189 @@
+/* Bit-banging I2C layer, inspired to a large extent from Linux kernel
+ * i2c-algo-bit.c code (C) 1995-2000 Simon G. Vogl.  This particular
+ * implementation is (C) 2019 by Harald Welte 
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include 
+#include 
+#include 
+#include "i2c_bitbang.h"
+
+#define setsda(adap, val)  gpio_set_pin_level((adap)->pin_sda, val)
+#define setscl(adap, val)  gpio_set_pin_level((adap)->pin_scl, val)
+
+static int getsda(const struct i2c_adapter *adap)
+{
+   int rc;
+   gpio_set_pin_direction(adap->pin_sda, GPIO_DIRECTION_IN);
+   rc = gpio_get_pin_level(adap->pin_sda);
+   gpio_set_pin_direction(adap->pin_sda, GPIO_DIRECTION_OUT);
+   return rc;
+}
+
+static int getscl(const struct i2c_adapter *adap)
+{
+   int rc;
+   gpio_set_pin_direction(adap->pin_scl, GPIO_DIRECTION_IN);
+   rc = gpio_get_pin_level(adap->pin_scl);
+   gpio_set_pin_direction(adap->pin_scl, GPIO_DIRECTION_OUT);
+   return rc;
+}
+
+static inline void sdalo(const struct i2c_adapter *adap)
+{
+   setsda(adap, 0);
+   delay_us((adap->udelay+1) / 2);
+}
+
+static inline void sdahi(const struct i2c_adapter *adap)
+{
+   setsda(adap, 1);
+   delay_us((adap->udelay+1) / 2);
+}
+
+static inline void scllo(const struct i2c_adapter *adap)
+{
+   setscl(adap, 0);
+   delay_us(adap->udelay / 2);
+}
+
+
+static int sclhi(const struct i2c_adapter *adap)
+{
+   setscl(adap, 1);
+
+   /* wait for slow slaves' clock stretching to complete */
+   while (!getscl(adap)) {
+   /* FIXME: abort at some point */
+   }
+   return 0;
+}
+
+static void i2c_start(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL + SDA are high */
+   setsda(adap, 0);/* set SDA to low */
+   delay_us(adap->udelay); /* delay */
+   scllo(adap);/* Set SCL to low */
+}
+
+static void i2c_repstart(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL is low */
+   sdahi(adap);
+   sclhi(adap);
+   setsda(adap, 0);
+   delay_us(adap->udelay);
+   scllo(adap);
+}
+
+static void i2c_stop(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL is low */
+   sdalo(adap);/* set SDA low */
+   sclhi(adap);/* set SCL to high */
+   setsda(adap, 1);/* set SDA to high */
+   delay_us(adap->udelay); /* delay */
+}
+
+static int i2c_outb(const struct i2c_adapter *adap, uint8_t outdata)
+{
+   uint8_t sb;
+   int ack, i;
+
+   /* Assert: SCL is low */
+   for (i = 7; i >= 0; i--) {
+   sb = (outdata >> i) & 1;
+   setsda(adap, sb);
+   delay_us((adap->udelay + 1) / 2);
+   if (sclhi(adap) < 0)
+   return -ERR_TIMEOUT;
+   scllo(adap);
+   }
+   sdahi(adap);
+   if (sclhi(adap) < 0)
+   return -ERR_TIMEOUT;
+   ack = !getsda(adap);
+   scllo(adap);
+   return ack;
+}
+
+static int i2c_inb(const struct i2c_adapter *adap)
+{
+   uint8_t indata = 

Change in osmo-ccid-firmware[master]: Support for sysmoOCTSIM NCN8025/SX1503 control

2019-02-26 Thread Kévin Redon
Kévin Redon has posted comments on this change. ( 
https://gerrit.osmocom.org/13030 )

Change subject: Support for sysmoOCTSIM NCN8025/SX1503 control
..


Patch Set 3: Code-Review+2


--
To view, visit https://gerrit.osmocom.org/13030
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-MessageType: comment
Gerrit-Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
Gerrit-Change-Number: 13030
Gerrit-PatchSet: 3
Gerrit-Owner: Harald Welte 
Gerrit-Reviewer: Jenkins Builder (102)
Gerrit-Reviewer: Kévin Redon 
Gerrit-Comment-Date: Tue, 26 Feb 2019 17:27:22 +
Gerrit-HasComments: No
Gerrit-HasLabels: Yes


Change in osmo-ccid-firmware[master]: Support for sysmoOCTSIM NCN8025/SX1503 control

2019-02-24 Thread Harald Welte
Hello Jenkins Builder,

I'd like you to reexamine a change. Please visit

https://gerrit.osmocom.org/13030

to look at the new patch set (#3).

Change subject: Support for sysmoOCTSIM NCN8025/SX1503 control
..

Support for sysmoOCTSIM NCN8025/SX1503 control

This adds an I2C bit-banging layer, defines the four busses on the
sysmoOCTSIM and adds some high-level functions to control the NCN8025
for each SIM slot.

Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
---
M sysmoOCTSIM/gcc/Makefile
A sysmoOCTSIM/i2c_bitbang.c
A sysmoOCTSIM/i2c_bitbang.h
M sysmoOCTSIM/main.c
A sysmoOCTSIM/ncn8025.c
A sysmoOCTSIM/ncn8025.h
A sysmoOCTSIM/octsim_i2c.c
A sysmoOCTSIM/octsim_i2c.h
8 files changed, 440 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware 
refs/changes/30/13030/3
--
To view, visit https://gerrit.osmocom.org/13030
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
Gerrit-Change-Number: 13030
Gerrit-PatchSet: 3
Gerrit-Owner: Harald Welte 
Gerrit-Reviewer: Jenkins Builder (102)


Change in osmo-ccid-firmware[master]: Support for sysmoOCTSIM NCN8025/SX1503 control

2019-02-24 Thread Harald Welte
Hello Jenkins Builder,

I'd like you to reexamine a change. Please visit

https://gerrit.osmocom.org/13030

to look at the new patch set (#2).

Change subject: Support for sysmoOCTSIM NCN8025/SX1503 control
..

Support for sysmoOCTSIM NCN8025/SX1503 control

This adds an I2C bit-banging layer, defines the four busses on the
sysmoOCTSIM and adds some high-level functions to control the NCN8025
for each SIM slot.

Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
---
M sysmoOCTSIM/gcc/Makefile
A sysmoOCTSIM/i2c_bitbang.c
A sysmoOCTSIM/i2c_bitbang.h
M sysmoOCTSIM/main.c
A sysmoOCTSIM/ncn8025.c
A sysmoOCTSIM/ncn8025.h
A sysmoOCTSIM/octsim_i2c.c
A sysmoOCTSIM/octsim_i2c.h
8 files changed, 440 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware 
refs/changes/30/13030/2
--
To view, visit https://gerrit.osmocom.org/13030
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-ccid-firmware
Gerrit-Branch: master
Gerrit-MessageType: newpatchset
Gerrit-Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
Gerrit-Change-Number: 13030
Gerrit-PatchSet: 2
Gerrit-Owner: Harald Welte 
Gerrit-Reviewer: Jenkins Builder (102)


Change in osmo-ccid-firmware[master]: Support for sysmoOCTSIM NCN8025/SX1503 control

2019-02-24 Thread Harald Welte
Harald Welte has uploaded this change for review. ( 
https://gerrit.osmocom.org/13030


Change subject: Support for sysmoOCTSIM NCN8025/SX1503 control
..

Support for sysmoOCTSIM NCN8025/SX1503 control

This adds an I2C bit-banging layer, defines the four busses on the
sysmoOCTSIM and adds some high-level functions to control the NCN8025
for each SIM slot.

Change-Id: Ic5287cf80d2be2070c504e9d40f7c6fc0d37d8b9
---
M sysmoOCTSIM/gcc/Makefile
A sysmoOCTSIM/i2c_bitbang.c
A sysmoOCTSIM/i2c_bitbang.h
M sysmoOCTSIM/main.c
A sysmoOCTSIM/ncn8025.c
A sysmoOCTSIM/ncn8025.h
A sysmoOCTSIM/octsim_i2c.c
A sysmoOCTSIM/octsim_i2c.h
8 files changed, 438 insertions(+), 0 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-ccid-firmware 
refs/changes/30/13030/1

diff --git a/sysmoOCTSIM/gcc/Makefile b/sysmoOCTSIM/gcc/Makefile
index 572fb21..5e3c38c 100644
--- a/sysmoOCTSIM/gcc/Makefile
+++ b/sysmoOCTSIM/gcc/Makefile
@@ -70,6 +70,9 @@
 gcc/gcc/startup_same54.o \
 hal/src/hal_usb_device.o \
 main.o \
+i2c_bitbang.o \
+octsim_i2c.o \
+ncn8025.o \
 hpl/osc32kctrl/hpl_osc32kctrl.o \
 examples/driver_examples.o \
 driver_init.o \
@@ -108,6 +111,9 @@
 "gcc/gcc/startup_same54.o" \
 "hal/src/hal_usb_device.o" \
 "main.o" \
+"i2c_bitbang.o" \
+"octsim_i2c.o" \
+"ncn8025.o" \
 "hpl/osc32kctrl/hpl_osc32kctrl.o" \
 "examples/driver_examples.o" \
 "driver_init.o" \
@@ -152,6 +158,9 @@
 "hal/src/hal_usart_async.d" \
 "hpl/osc32kctrl/hpl_osc32kctrl.d" \
 "main.d" \
+"i2c_bitbang.d" \
+"octsim_i2c.d" \
+"ncn8025.d" \
 "examples/driver_examples.d" \
 "hal/src/hal_cache.d" \
 "hal/src/hal_sleep.d" \
diff --git a/sysmoOCTSIM/i2c_bitbang.c b/sysmoOCTSIM/i2c_bitbang.c
new file mode 100644
index 000..b1a9a62
--- /dev/null
+++ b/sysmoOCTSIM/i2c_bitbang.c
@@ -0,0 +1,189 @@
+/* Bit-banging I2C layer, inspired to a large extent from Linux kernel
+ * i2c-algo-bit.c code (C) 1995-2000 Simon G. Vogl.  This particular
+ * implementation is (C) 2019 by Harald Welte 
+ *
+ *  SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include 
+#include 
+#include 
+#include "i2c_bitbang.h"
+
+#define setsda(adap, val)  gpio_set_pin_level((adap)->pin_sda, val)
+#define setscl(adap, val)  gpio_set_pin_level((adap)->pin_scl, val)
+
+static int getsda(const struct i2c_adapter *adap)
+{
+   int rc;
+   gpio_set_pin_direction(adap->pin_sda, GPIO_DIRECTION_IN);
+   rc = gpio_get_pin_level(adap->pin_sda);
+   gpio_set_pin_direction(adap->pin_sda, GPIO_DIRECTION_OUT);
+   return rc;
+}
+
+static int getscl(const struct i2c_adapter *adap)
+{
+   int rc;
+   gpio_set_pin_direction(adap->pin_scl, GPIO_DIRECTION_IN);
+   rc = gpio_get_pin_level(adap->pin_scl);
+   gpio_set_pin_direction(adap->pin_scl, GPIO_DIRECTION_OUT);
+   return rc;
+}
+
+static inline void sdalo(const struct i2c_adapter *adap)
+{
+   setsda(adap, 0);
+   delay_us((adap->udelay+1) / 2);
+}
+
+static inline void sdahi(const struct i2c_adapter *adap)
+{
+   setsda(adap, 1);
+   delay_us((adap->udelay+1) / 2);
+}
+
+static inline void scllo(const struct i2c_adapter *adap)
+{
+   setscl(adap, 0);
+   delay_us(adap->udelay / 2);
+}
+
+
+static int sclhi(const struct i2c_adapter *adap)
+{
+   setscl(adap, 1);
+
+   /* wait for slow slaves' clock stretching to complete */
+   while (!getscl(adap)) {
+   /* FIXME: abort at some point */
+   }
+   return 0;
+}
+
+static void i2c_start(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL + SDA are high */
+   setsda(adap, 0);/* set SDA to low */
+   delay_us(adap->udelay); /* delay */
+   scllo(adap);/* Set SCL to low */
+}
+
+static void i2c_repstart(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL is low */
+   sdahi(adap);
+   sclhi(adap);
+   setsda(adap, 0);
+   delay_us(adap->udelay);
+   scllo(adap);
+}
+
+static void i2c_stop(const struct i2c_adapter *adap)
+{
+   /* Assert: SCL is low */
+   sdalo(adap);/* set SDA low */
+   sclhi(adap);/* set SCL to high */
+   setsda(adap, 1);/* set SDA to high */
+   delay_us(adap->udelay); /* delay */
+}
+
+static int i2c_outb(const struct i2c_adapter *adap, uint8_t outdata)
+{
+   uint8_t sb;
+   int ack, i;
+
+   /* Assert: SCL is low */
+   for (i = 7; i >= 0; i--) {
+   sb = (outdata >> i) & 1;
+   setsda(adap, sb);
+   delay_us((adap->udelay + 1) / 2);
+   if (sclhi(adap) < 0)
+   return -ERR_TIMEOUT;
+   scllo(adap);
+   }
+   sdahi(adap);
+   if (sclhi(adap) < 0)
+   return -ERR_TIMEOUT;
+   ack = !getsda(adap);
+   scllo(adap);
+   return ack;
+}
+
+static int i2c_inb(const struct i2c_adapter *adap)
+{
+   uint8_t indata = 0;