blob: 3bd100f1185533351ddca11ce7a64c251f211900 [file] [log] [blame]
#!/bin/bash
add_i2c_device()
{
local I2C_BUS=$1
local DEV_ADDR=$2
local DEVICE_COMP=$3
local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
local NEW_DEVIVE="$I2C_BUS_DIR/new_device"
echo "$DEVICE_COMP" "$DEV_ADDR" > "$NEW_DEVIVE"
}
delete_i2c_device()
{
local I2C_BUS=$1
local DEV_ADDR=$2
local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
local DEL_DEVIVE="$I2C_BUS_DIR/delete_device"
echo "$DEV_ADDR" > "$DEL_DEVIVE"
}
is_valid_hdc1080()
{
local I2C_BUS=$1
local DEV_ADDR=$2
MFR_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xfe r2)
if [ "$MFR_ID" != "0x54 0x49" ]; then
return 1;
fi
DEV_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xff r2)
if [ "$DEV_ID" != "0x10 0x50" ]; then
return 1;
fi
return 0;
}
I2C_BUS=10
DEV_ADDR=0x40
I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
DEV_ADDR_HEXSTR="$(printf %04X $DEV_ADDR)"
DEV_DIR="$I2C_BUS_DIR/$I2C_BUS-$DEV_ADDR_HEXSTR"
DEV_NAME_FILE="$DEV_DIR/name"
# Check chip type
if is_valid_hdc1080 "$I2C_BUS" "$DEV_ADDR"; then
CHIP_TYPE="HDC1080"
DEVICE_COMP="ti,hdc1080"
else
CHIP_TYPE="SI7021"
DEVICE_COMP="silabs,si7020"
fi
# Check and probe i2c device
if [ ! -f "$DEV_NAME_FILE" ]; then
# i2c device not porbed yet
add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP"
else
DEV_NAME=$(cat "$DEV_NAME_FILE")
if [ "$DEV_NAME" != "$DEVICE_COMP" ]; then
# incorrect driver probed, delete and add again
delete_i2c_device "$I2C_BUS" "$DEV_ADDR"
add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP"
fi
fi
VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config.json"
HDC1080_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_hdc1080.json"
SI7021_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_si7021.json"
# Setup virtual_sensor_config.json for phosphor-virtual-sensor
case "$CHIP_TYPE" in
"HDC1080")
REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF"
;;
"SI7021")
REQUIRED_CONF_PATH="$SI7021_VIRT_SNR_CONF"
;;
*)
REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF"
;;
esac
if [ ! -e "$VIRT_SNR_CONF" ]; then
ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF"
else
REAL_CONF_PATH="$(realpath $VIRT_SNR_CONF)"
if [ "$REAL_CONF_PATH" != "$REQUIRED_CONF_PATH" ]; then
rm "$VIRT_SNR_CONF"
ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF"
fi
fi