Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

i2c: Let i2c_parent_is_i2c_adapter return the parent adapter

This makes the calling site's code clearer IMHO.

Signed-off-by: Jean Delvare <khali@linux-fr.org>
Acked-by: Michael Lawnick <ml.lawnick@gmx.de>

authored by

Jean Delvare and committed by
Jean Delvare
97cc4d49 d582963a

+32 -22
+18 -12
drivers/i2c/i2c-core.c
··· 425 425 /* walk up mux tree */ 426 426 static int i2c_check_mux_parents(struct i2c_adapter *adapter, int addr) 427 427 { 428 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 428 429 int result; 429 430 430 431 result = device_for_each_child(&adapter->dev, &addr, 431 432 __i2c_check_addr_busy); 432 433 433 - if (!result && i2c_parent_is_i2c_adapter(adapter)) 434 - result = i2c_check_mux_parents( 435 - to_i2c_adapter(adapter->dev.parent), addr); 434 + if (!result && parent) 435 + result = i2c_check_mux_parents(parent, addr); 436 436 437 437 return result; 438 438 } ··· 453 453 454 454 static int i2c_check_addr_busy(struct i2c_adapter *adapter, int addr) 455 455 { 456 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 456 457 int result = 0; 457 458 458 - if (i2c_parent_is_i2c_adapter(adapter)) 459 - result = i2c_check_mux_parents( 460 - to_i2c_adapter(adapter->dev.parent), addr); 459 + if (parent) 460 + result = i2c_check_mux_parents(parent, addr); 461 461 462 462 if (!result) 463 463 result = device_for_each_child(&adapter->dev, &addr, ··· 472 472 */ 473 473 void i2c_lock_adapter(struct i2c_adapter *adapter) 474 474 { 475 - if (i2c_parent_is_i2c_adapter(adapter)) 476 - i2c_lock_adapter(to_i2c_adapter(adapter->dev.parent)); 475 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 476 + 477 + if (parent) 478 + i2c_lock_adapter(parent); 477 479 else 478 480 rt_mutex_lock(&adapter->bus_lock); 479 481 } ··· 487 485 */ 488 486 static int i2c_trylock_adapter(struct i2c_adapter *adapter) 489 487 { 490 - if (i2c_parent_is_i2c_adapter(adapter)) 491 - return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent)); 488 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 489 + 490 + if (parent) 491 + return i2c_trylock_adapter(parent); 492 492 else 493 493 return rt_mutex_trylock(&adapter->bus_lock); 494 494 } ··· 501 497 */ 502 498 void i2c_unlock_adapter(struct i2c_adapter *adapter) 503 499 { 504 - if (i2c_parent_is_i2c_adapter(adapter)) 505 - i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent)); 500 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 501 + 502 + if (parent) 503 + i2c_unlock_adapter(parent); 506 504 else 507 505 rt_mutex_unlock(&adapter->bus_lock); 508 506 }
+6 -7
drivers/i2c/i2c-dev.c
··· 192 192 /* walk up mux tree */ 193 193 static int i2cdev_check_mux_parents(struct i2c_adapter *adapter, int addr) 194 194 { 195 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 195 196 int result; 196 197 197 198 result = device_for_each_child(&adapter->dev, &addr, i2cdev_check); 198 - 199 - if (!result && i2c_parent_is_i2c_adapter(adapter)) 200 - result = i2cdev_check_mux_parents( 201 - to_i2c_adapter(adapter->dev.parent), addr); 199 + if (!result && parent) 200 + result = i2cdev_check_mux_parents(parent, addr); 202 201 203 202 return result; 204 203 } ··· 221 222 driver bound to it, as NOT busy. */ 222 223 static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr) 223 224 { 225 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter); 224 226 int result = 0; 225 227 226 - if (i2c_parent_is_i2c_adapter(adapter)) 227 - result = i2cdev_check_mux_parents( 228 - to_i2c_adapter(adapter->dev.parent), addr); 228 + if (parent) 229 + result = i2cdev_check_mux_parents(parent, addr); 229 230 230 231 if (!result) 231 232 result = device_for_each_child(&adapter->dev, &addr,
+8 -3
include/linux/i2c.h
··· 384 384 dev_set_drvdata(&dev->dev, data); 385 385 } 386 386 387 - static inline int i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter) 387 + static inline struct i2c_adapter * 388 + i2c_parent_is_i2c_adapter(const struct i2c_adapter *adapter) 388 389 { 389 - return adapter->dev.parent != NULL 390 - && adapter->dev.parent->type == &i2c_adapter_type; 390 + struct device *parent = adapter->dev.parent; 391 + 392 + if (parent != NULL && parent->type == &i2c_adapter_type) 393 + return to_i2c_adapter(parent); 394 + else 395 + return NULL; 391 396 } 392 397 393 398 /* Adapter locking functions, exported for shared pin cases */