1) Может быть проблема при MAX_SWITCH < 3. Если на платформе
NULL==0 то делать так: static i2c_device_t * client[MAX_SWITCH] = { NULL }; // первый==NULL, остальные элементы будут равны 0.
static i2c_device_t * client[MAX_SWITCH] = { }; // все элементы будут равны 0.
Если на платформе вдруг NULL!=0, то так:
static i2c_device_t * client[MAX_SWITCH];
memset (client, NULL, sizeof(client));
2) что происходит в i2c_SelectBus ?
3) к теме не относится, но можно сразу писать
typedef struct
{
.....
} i2c_device_t; // сразу объявляем тип из безымянной структуры