From: Danylo Vodopianov <dvo-...@napatech.com>

Add initialization for I2C mux and LED driver.

Signed-off-by: Danylo Vodopianov <dvo-...@napatech.com>
---
 .../ntnic/nthw/core/include/nthw_pca9532.h    |  3 +++
 .../nthw/core/include/nthw_si5332_si5156.h    |  3 +++
 .../nt400dxx/reset/nthw_fpga_rst_nt400dxx.c   | 23 +++++++++++++++++++
 drivers/net/ntnic/nthw/core/nthw_pca9532.c    | 20 ++++++++++++++++
 .../net/ntnic/nthw/core/nthw_si5332_si5156.c  | 18 +++++++++++++++
 5 files changed, 67 insertions(+)

diff --git a/drivers/net/ntnic/nthw/core/include/nthw_pca9532.h 
b/drivers/net/ntnic/nthw/core/include/nthw_pca9532.h
index 24da937a18..7cc0008dcb 100644
--- a/drivers/net/ntnic/nthw/core/include/nthw_pca9532.h
+++ b/drivers/net/ntnic/nthw/core/include/nthw_pca9532.h
@@ -17,6 +17,9 @@ struct nthw_pca9532 {
 
 typedef struct nthw_pca9532 nthw_pca9532_t;
 
+nthw_pca9532_t *nthw_pca9532_new(void);
+int nthw_pca9532_init(nthw_pca9532_t *p, nthw_i2cm_t *p_nt_i2cm, uint8_t 
dev_address,
+       nthw_pca9849_t *pca9849, uint8_t mux_channel);
 void nthw_pca9532_set_led_on(nthw_pca9532_t *p, uint8_t led_pos, bool 
state_on);
 
 #endif /* __NTHW_PCA9532_H__ */
diff --git a/drivers/net/ntnic/nthw/core/include/nthw_si5332_si5156.h 
b/drivers/net/ntnic/nthw/core/include/nthw_si5332_si5156.h
index 753717ba8a..9eaf8872e3 100644
--- a/drivers/net/ntnic/nthw/core/include/nthw_si5332_si5156.h
+++ b/drivers/net/ntnic/nthw/core/include/nthw_si5332_si5156.h
@@ -19,6 +19,9 @@ struct nthw_pca9849 {
 
 typedef struct nthw_pca9849 nthw_pca9849_t;
 
+nthw_pca9849_t *nthw_pca9849_new(void);
+int nthw_pca9849_init(nthw_pca9849_t *p, nthw_i2cm_t *p_nt_i2cm, uint8_t 
dev_address);
+
 int nthw_pca9849_set_channel(nthw_pca9849_t *p, uint8_t channel);
 
 /*
diff --git 
a/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c 
b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
index bfc66a97d1..6c5c1cd51e 100644
--- a/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
+++ b/drivers/net/ntnic/nthw/core/nt400dxx/reset/nthw_fpga_rst_nt400dxx.c
@@ -77,6 +77,29 @@ static int nthw_fpga_rst_nt400dxx_init(struct fpga_info_s 
*p_fpga_info)
        if (res != 0)
                return res;
 
+       /* Create pca9849 i2c mux */
+       p_fpga_info->mp_nthw_agx.p_pca9849 = nthw_pca9849_new();
+       res = nthw_pca9849_init(p_fpga_info->mp_nthw_agx.p_pca9849,
+                       p_fpga_info->mp_nthw_agx.p_i2cm,
+                       0x71);
+
+       if (res != 0)
+               return res;
+
+       /* Create LED driver */
+       p_fpga_info->mp_nthw_agx.p_pca9532_led = nthw_pca9532_new();
+       res = nthw_pca9532_init(p_fpga_info->mp_nthw_agx.p_pca9532_led,
+                       p_fpga_info->mp_nthw_agx.p_i2cm,
+                       0x60,
+                       p_fpga_info->mp_nthw_agx.p_pca9849,
+                       3);
+
+       if (res != 0)
+               return res;
+
+       for (uint8_t i = 0; i < 16; i++)
+               nthw_pca9532_set_led_on(p_fpga_info->mp_nthw_agx.p_pca9532_led, 
i, false);
+
        /* Create PCM */
        p_fpga_info->mp_nthw_agx.p_pcm = nthw_pcm_nt400dxx_new();
        res = nthw_pcm_nt400dxx_init(p_fpga_info->mp_nthw_agx.p_pcm, p_fpga, 0);
diff --git a/drivers/net/ntnic/nthw/core/nthw_pca9532.c 
b/drivers/net/ntnic/nthw/core/nthw_pca9532.c
index fcf5463fcb..af14cd6d06 100644
--- a/drivers/net/ntnic/nthw/core/nthw_pca9532.c
+++ b/drivers/net/ntnic/nthw/core/nthw_pca9532.c
@@ -15,6 +15,26 @@
 
 static const uint8_t led_sel_reg[4] = { 6, 7, 8, 9 };
 
+nthw_pca9532_t *nthw_pca9532_new(void)
+{
+       nthw_pca9532_t *p = malloc(sizeof(nthw_pca9532_t));
+
+       if (p)
+               memset(p, 0, sizeof(nthw_pca9532_t));
+
+       return p;
+}
+
+int nthw_pca9532_init(nthw_pca9532_t *p, nthw_i2cm_t *p_nt_i2cm, uint8_t 
dev_address,
+       nthw_pca9849_t *pca9849, uint8_t mux_channel)
+{
+       p->mp_nt_i2cm = p_nt_i2cm;
+       p->m_dev_address = dev_address;
+       p->mp_ca9849 = pca9849;
+       p->m_mux_channel = mux_channel;
+       return 0;
+}
+
 void nthw_pca9532_set_led_on(nthw_pca9532_t *p, uint8_t led_pos, bool state_on)
 {
        if (led_pos >= 16) {
diff --git a/drivers/net/ntnic/nthw/core/nthw_si5332_si5156.c 
b/drivers/net/ntnic/nthw/core/nthw_si5332_si5156.c
index b4a7b57bcb..eb11ebc67a 100644
--- a/drivers/net/ntnic/nthw/core/nthw_si5332_si5156.c
+++ b/drivers/net/ntnic/nthw/core/nthw_si5332_si5156.c
@@ -13,6 +13,24 @@
 
 #include "nthw_si5332_si5156.h"
 
+nthw_pca9849_t *nthw_pca9849_new(void)
+{
+       nthw_pca9849_t *p = malloc(sizeof(nthw_pca9849_t));
+
+       if (p)
+               memset(p, 0, sizeof(nthw_pca9849_t));
+
+       return p;
+}
+
+int nthw_pca9849_init(nthw_pca9849_t *p, nthw_i2cm_t *p_nt_i2cm, uint8_t 
dev_address)
+{
+       p->mp_nt_i2cm = p_nt_i2cm;
+       p->m_dev_address = dev_address;
+       p->m_current_channel = 0;
+       return 0;
+}
+
 int nthw_pca9849_set_channel(nthw_pca9849_t *p, uint8_t channel)
 {
        int res;
-- 
2.45.0

Reply via email to