[PATCH v1 27/32] net/ntnic: add pca init
Serhii Iliushyk
sil-plv at napatech.com
Thu Feb 20 23:03:51 CET 2025
From: Danylo Vodopianov <dvo-plv at napatech.com>
Add initialization for I2C mux and LED driver.
Signed-off-by: Danylo Vodopianov <dvo-plv at 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
More information about the dev
mailing list