File indexing completed on 2025-05-11 08:24:11
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifdef HAVE_CONFIG_H
0018 #include "config.h"
0019 #endif
0020
0021 #include <dev/i2c/switch-nxp-pca9548a.h>
0022
0023 static int switch_nxp_pca9548a_do_get_control(
0024 i2c_dev *dev,
0025 uint8_t *val
0026 )
0027 {
0028 i2c_msg msg = {
0029 .addr = dev->address,
0030 .flags = I2C_M_RD,
0031 .len = (uint16_t) sizeof(*val),
0032 .buf = val
0033 };
0034
0035 return i2c_bus_transfer(dev->bus, &msg, 1);
0036 }
0037
0038 static int switch_nxp_pca9548a_do_set_control(
0039 i2c_dev *dev,
0040 uint8_t val
0041 )
0042 {
0043 i2c_msg msg = {
0044 .addr = dev->address,
0045 .flags = 0,
0046 .len = (uint16_t) sizeof(val),
0047 .buf = &val
0048 };
0049
0050 return i2c_bus_transfer(dev->bus, &msg, 1);
0051 }
0052
0053 static int switch_nxp_pca9548a_ioctl(
0054 i2c_dev *dev,
0055 ioctl_command_t command,
0056 void *arg
0057 )
0058 {
0059 uint8_t v8 = (uint8_t)(uintptr_t) arg;
0060 int err;
0061
0062 switch (command) {
0063 case SWITCH_NXP_PCA9548A_GET_CONTROL:
0064 err = switch_nxp_pca9548a_do_get_control(dev, arg);
0065 break;
0066 case SWITCH_NXP_PCA9548A_SET_CONTROL:
0067 err = switch_nxp_pca9548a_do_set_control(dev, v8);
0068 break;
0069 default:
0070 err = -ENOTTY;
0071 break;
0072 }
0073
0074 return err;
0075 }
0076
0077 int i2c_dev_register_switch_nxp_pca9548a(
0078 const char *bus_path,
0079 const char *dev_path,
0080 uint16_t address
0081 )
0082 {
0083 i2c_dev *dev;
0084
0085 dev = i2c_dev_alloc_and_init(sizeof(*dev), bus_path, address);
0086 if (dev == NULL) {
0087 return -1;
0088 }
0089
0090 dev->ioctl = switch_nxp_pca9548a_ioctl;
0091
0092 return i2c_dev_register(dev, dev_path);
0093 }