11#ifndef DRIVERS_MFD_MFD_SIPOMUXGP_H_
12#define DRIVERS_MFD_MFD_SIPOMUXGP_H_
14#include <zephyr/kernel.h>
15#include <zephyr/device.h>
16#include <zephyr/pm/device.h>
18#include <zephyr/drivers/gpio.h>
19#include <zephyr/drivers/gpio/gpio_utils.h>
23#include <zephyr/sys/util.h>
27 int (*
init)(
const struct device *dev);
28 int (*
cfg_oe)(
const struct device *dev);
30 int (*
set_oe)(
const struct device *dev,
const uint8_t value);
31 int (*
set_addr)(
const struct device *dev,
const uint8_t addr);
32 int (*
xfr_data)(
const struct device *dev,
const uint8_t addr,
33 const uint8_t *tx_data,
const size_t tx_count,
34 const size_t padding_sz);
40 const struct gpio_dt_spec *
addr;
48 const struct device *
dev;
62#define __BITBUF_COL(bit, cols) ((bit) % (cols))
63#define __BITBUF_ROW(bit, cols) ((bit) / (cols))
64#define __BITBUF_BIT(bit, cols) ( \
65 (NUM_BITS(uint8_t) - 1) \
66 - (((bit) % (cols)) % NUM_BITS(uint8_t)) \
68#define __BITBUF_IDX(bit, cols) ( \
69 (__BITBUF_COL((bit), (cols)) / NUM_BITS(uint8_t)) \
70 + (__BITBUF_ROW((bit), (cols)) * ((cols) / NUM_BITS(uint8_t)))\
73#define __TOTAL_BYTES(total_bits) (DIV_ROUND_UP(DIV_ROUND_UP( \
74 total_bits, NUM_BITS(uint8_t)), sizeof(uint8_t)) \
79#define MFD_SIPOMUXGP_NUM_INSTS ( \
80 DT_NUM_INST_STATUS_OKAY(sipo_mux_gp) \
81 + DT_NUM_INST_STATUS_OKAY(sipo_mux_gp_spi) \
struct k_work_q mfd_sipomuxgp_xfr_workq
Definition mfd_sipomuxgp_workq.c:15
struct mfd_sipomuxgp_backend mfd_sipomuxgp_backend_t
struct mfd_sipomuxgp_data mfd_sipomuxgp_data_t
struct mfd_sipomuxgp_config mfd_sipomuxgp_config_t
MFD Interface for an SIPO/MUX GP matrix controller.
Definition mfd_sipomuxgp.h:25
int(* init)(const struct device *dev)
Definition mfd_sipomuxgp.h:27
int(* cfg_oe)(const struct device *dev)
Definition mfd_sipomuxgp.h:28
int(* cfg_addr)(const struct device *dev)
Definition mfd_sipomuxgp.h:29
int(* set_oe)(const struct device *dev, const uint8_t value)
Definition mfd_sipomuxgp.h:30
int(* xfr_data)(const struct device *dev, const uint8_t addr, const uint8_t *tx_data, const size_t tx_count, const size_t padding_sz)
Definition mfd_sipomuxgp.h:32
const void * config
Definition mfd_sipomuxgp.h:26
int(* set_addr)(const struct device *dev, const uint8_t addr)
Definition mfd_sipomuxgp.h:31
Definition mfd_sipomuxgp.h:37
const size_t rows
Definition mfd_sipomuxgp.h:44
const size_t num_bits
Definition mfd_sipomuxgp.h:42
const mfd_sipomuxgp_backend_t backend
Definition mfd_sipomuxgp.h:38
const struct gpio_dt_spec * addr
Definition mfd_sipomuxgp.h:40
const size_t num_addr
Definition mfd_sipomuxgp.h:41
const size_t columns
Definition mfd_sipomuxgp.h:43
const struct gpio_dt_spec enable
Definition mfd_sipomuxgp.h:39
Definition mfd_sipomuxgp.h:47
struct k_timer refresh_timer
Definition mfd_sipomuxgp.h:51
uint8_t oe_count
Definition mfd_sipomuxgp.h:59
bool oe_noratio
Definition mfd_sipomuxgp.h:58
struct k_work refresh_worker
Definition mfd_sipomuxgp.h:50
const size_t bitbuf_sz
Definition mfd_sipomuxgp.h:54
const struct device * dev
Definition mfd_sipomuxgp.h:48
uint32_t refresh_time_us
Definition mfd_sipomuxgp.h:52
size_t row_count
Definition mfd_sipomuxgp.h:56
bool oe_noblank
Definition mfd_sipomuxgp.h:57
const size_t padding_sz
Definition mfd_sipomuxgp.h:53
uint8_t * bitbuf
Definition mfd_sipomuxgp.h:55
struct k_spinlock lock
Definition mfd_sipomuxgp.h:49