blob: 3bd100f1185533351ddca11ce7a64c251f211900 [file] [log] [blame]
Potin Lai8d5ee802022-08-09 09:46:48 +00001#!/bin/bash
2
3add_i2c_device()
4{
5 local I2C_BUS=$1
6 local DEV_ADDR=$2
7 local DEVICE_COMP=$3
8 local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
9 local NEW_DEVIVE="$I2C_BUS_DIR/new_device"
10
11 echo "$DEVICE_COMP" "$DEV_ADDR" > "$NEW_DEVIVE"
12}
13
14delete_i2c_device()
15{
16 local I2C_BUS=$1
17 local DEV_ADDR=$2
18 local I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
19 local DEL_DEVIVE="$I2C_BUS_DIR/delete_device"
20
21 echo "$DEV_ADDR" > "$DEL_DEVIVE"
22}
23
24is_valid_hdc1080()
25{
26 local I2C_BUS=$1
27 local DEV_ADDR=$2
28
29 MFR_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xfe r2)
30 if [ "$MFR_ID" != "0x54 0x49" ]; then
31 return 1;
32 fi
33
34 DEV_ID=$(i2ctransfer -y -f "${I2C_BUS}" w1@"${DEV_ADDR}" 0xff r2)
35 if [ "$DEV_ID" != "0x10 0x50" ]; then
36 return 1;
37 fi
38
39 return 0;
40}
41
42
43I2C_BUS=10
44DEV_ADDR=0x40
45I2C_BUS_DIR="/sys/bus/i2c/devices/i2c-$I2C_BUS"
46DEV_ADDR_HEXSTR="$(printf %04X $DEV_ADDR)"
47DEV_DIR="$I2C_BUS_DIR/$I2C_BUS-$DEV_ADDR_HEXSTR"
48DEV_NAME_FILE="$DEV_DIR/name"
49
50# Check chip type
51if is_valid_hdc1080 "$I2C_BUS" "$DEV_ADDR"; then
52 CHIP_TYPE="HDC1080"
53 DEVICE_COMP="ti,hdc1080"
54else
55 CHIP_TYPE="SI7021"
56 DEVICE_COMP="silabs,si7020"
57fi
58
59# Check and probe i2c device
60if [ ! -f "$DEV_NAME_FILE" ]; then
61 # i2c device not porbed yet
62 add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP"
63else
64 DEV_NAME=$(cat "$DEV_NAME_FILE")
65 if [ "$DEV_NAME" != "$DEVICE_COMP" ]; then
66 # incorrect driver probed, delete and add again
67 delete_i2c_device "$I2C_BUS" "$DEV_ADDR"
68 add_i2c_device "$I2C_BUS" "$DEV_ADDR" "$DEVICE_COMP"
69 fi
70fi
71
72
73VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config.json"
74HDC1080_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_hdc1080.json"
75SI7021_VIRT_SNR_CONF="/usr/share/phosphor-virtual-sensor/virtual_sensor_config_si7021.json"
76
77
78# Setup virtual_sensor_config.json for phosphor-virtual-sensor
79case "$CHIP_TYPE" in
80"HDC1080")
81 REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF"
82 ;;
83"SI7021")
84 REQUIRED_CONF_PATH="$SI7021_VIRT_SNR_CONF"
85 ;;
86*)
87 REQUIRED_CONF_PATH="$HDC1080_VIRT_SNR_CONF"
88 ;;
89esac
90
91if [ ! -e "$VIRT_SNR_CONF" ]; then
92 ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF"
93else
94 REAL_CONF_PATH="$(realpath $VIRT_SNR_CONF)"
95 if [ "$REAL_CONF_PATH" != "$REQUIRED_CONF_PATH" ]; then
96 rm "$VIRT_SNR_CONF"
97 ln -s "$REQUIRED_CONF_PATH" "$VIRT_SNR_CONF"
98 fi
99fi