Bridle API 4.1.99
A Zephyr based application framework
Loading...
Searching...
No Matches
mfd_sipomuxgp.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023-2024 TiaC Systems
3 * SPDX-License-Identifier: Apache-2.0
4 */
5
11#ifndef DRIVERS_MFD_MFD_SIPOMUXGP_H_
12#define DRIVERS_MFD_MFD_SIPOMUXGP_H_
13
14#include <zephyr/kernel.h>
15#include <zephyr/device.h>
16#include <zephyr/pm/device.h>
17
18#include <zephyr/drivers/gpio.h>
19#include <zephyr/drivers/gpio/gpio_utils.h>
20
22
23#include <zephyr/sys/util.h>
24
25typedef struct mfd_sipomuxgp_backend {
26 const void *config;
27 int (*init)(const struct device *dev);
28 int (*cfg_oe)(const struct device *dev);
29 int (*cfg_addr)(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);
36
37typedef struct mfd_sipomuxgp_config {
39 const struct gpio_dt_spec enable;
40 const struct gpio_dt_spec *addr;
41 const size_t num_addr;
42 const size_t num_bits;
43 const size_t columns;
44 const size_t rows;
46
47typedef struct mfd_sipomuxgp_data {
48 const struct device *dev;
49 struct k_spinlock lock;
50 struct k_work refresh_worker;
51 struct k_timer refresh_timer;
53 const size_t padding_sz;
54 const size_t bitbuf_sz;
55 uint8_t *bitbuf;
56 size_t row_count;
59 uint8_t oe_count;
61
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)) \
67 )
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)))\
71 )
72
73#define __TOTAL_BYTES(total_bits) (DIV_ROUND_UP(DIV_ROUND_UP( \
74 total_bits, NUM_BITS(uint8_t)), sizeof(uint8_t)) \
75 )
76
77extern struct k_work_q mfd_sipomuxgp_xfr_workq;
78
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) \
82 )
83
84#endif /* DRIVERS_MFD_MFD_SIPOMUXGP_H_ */
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