···425425/* walk up mux tree */426426static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr)427427{428428+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);428429 int result;429430430431 result = device_for_each_child(&adapter->dev, &addr,431432 __i2c_check_addr_busy);432433433433- if (!result && i2c_parent_is_i2c_adapter(adapter))434434- result = i2c_check_mux_parents(435435- to_i2c_adapter(adapter->dev.parent), addr);434434+ if (!result && parent)435435+ result = i2c_check_mux_parents(parent, addr);436436437437 return result;438438}···453453454454static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr)455455{456456+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);456457 int result = 0;457458458458- if (i2c_parent_is_i2c_adapter(adapter))459459- result = i2c_check_mux_parents(460460- to_i2c_adapter(adapter->dev.parent), addr);459459+ if (parent)460460+ result = i2c_check_mux_parents(parent, addr);461461462462 if (!result)463463 result = device_for_each_child(&adapter->dev, &addr,···472472 */473473void i2c_lock_adapter(struct i2c_adapter *adapter)474474{475475- if (i2c_parent_is_i2c_adapter(adapter))476476- i2c_lock_adapter(to_i2c_adapter(adapter->dev.parent));475475+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);476476+477477+ if (parent)478478+ i2c_lock_adapter(parent);477479 else478480 rt_mutex_lock(&adapter->bus_lock);479481}···487485 */488486static int i2c_trylock_adapter(struct i2c_adapter *adapter)489487{490490- if (i2c_parent_is_i2c_adapter(adapter))491491- return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent));488488+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);489489+490490+ if (parent)491491+ return i2c_trylock_adapter(parent);492492 else493493 return rt_mutex_trylock(&adapter->bus_lock);494494}···501497 */502498void i2c_unlock_adapter(struct i2c_adapter *adapter)503499{504504- if (i2c_parent_is_i2c_adapter(adapter))505505- i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent));500500+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);501501+502502+ if (parent)503503+ i2c_unlock_adapter(parent);506504 else507505 rt_mutex_unlock(&adapter->bus_lock);508506}
+6-7
drivers/i2c/i2c-dev.c
···192192/* walk up mux tree */193193static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr)194194{195195+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);195196 int result;196197197198 result = device_for_each_child(&adapter->dev, &addr, i2cdev_check);198198-199199- if (!result && i2c_parent_is_i2c_adapter(adapter))200200- result = i2cdev_check_mux_parents(201201- to_i2c_adapter(adapter->dev.parent), addr);199199+ if (!result && parent)200200+ result = i2cdev_check_mux_parents(parent, addr);202201203202 return result;204203}···221222 driver bound to it, as NOT busy. */222223static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)223224{225225+ struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);224226 int result = 0;225227226226- if (i2c_parent_is_i2c_adapter(adapter))227227- result = i2cdev_check_mux_parents(228228- to_i2c_adapter(adapter->dev.parent), addr);228228+ if (parent)229229+ result = i2cdev_check_mux_parents(parent, addr);229230230231 if (!result)231232 result = device_for_each_child(&adapter->dev, &addr,