Commit 97cc4d49cfcda1c2dad89c00b62a25b628ce2115

Authored by Jean Delvare
Committed by Jean Delvare
1 parent d582963a02

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>

Showing 3 changed files with 32 additions and 22 deletions Side-by-side Diff

drivers/i2c/i2c-core.c
... ... @@ -425,14 +425,14 @@
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 }
439 439  
... ... @@ -453,11 +453,11 @@
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,8 +472,10 @@
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 }
... ... @@ -485,8 +487,10 @@
485 487 */
486 488 static int i2c_trylock_adapter(struct i2c_adapter *adapter)
487 489 {
488   - if (i2c_parent_is_i2c_adapter(adapter))
489   - return i2c_trylock_adapter(to_i2c_adapter(adapter->dev.parent));
  490 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
  491 +
  492 + if (parent)
  493 + return i2c_trylock_adapter(parent);
490 494 else
491 495 return rt_mutex_trylock(&adapter->bus_lock);
492 496 }
... ... @@ -497,8 +501,10 @@
497 501 */
498 502 void i2c_unlock_adapter(struct i2c_adapter *adapter)
499 503 {
500   - if (i2c_parent_is_i2c_adapter(adapter))
501   - i2c_unlock_adapter(to_i2c_adapter(adapter->dev.parent));
  504 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
  505 +
  506 + if (parent)
  507 + i2c_unlock_adapter(parent);
502 508 else
503 509 rt_mutex_unlock(&adapter->bus_lock);
504 510 }
drivers/i2c/i2c-dev.c
... ... @@ -192,14 +192,13 @@
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);
  199 + if (!result && parent)
  200 + result = i2cdev_check_mux_parents(parent, addr);
198 201  
199   - if (!result && i2c_parent_is_i2c_adapter(adapter))
200   - result = i2cdev_check_mux_parents(
201   - to_i2c_adapter(adapter->dev.parent), addr);
202   -
203 202 return result;
204 203 }
205 204  
206 205  
... ... @@ -222,11 +221,11 @@
222 221 driver bound to it, as NOT busy. */
223 222 static int i2cdev_check_addr(struct i2c_adapter *adapter, unsigned int addr)
224 223 {
  224 + struct i2c_adapter *parent = i2c_parent_is_i2c_adapter(adapter);
225 225 int result = 0;
226 226  
227   - if (i2c_parent_is_i2c_adapter(adapter))
228   - result = i2cdev_check_mux_parents(
229   - to_i2c_adapter(adapter->dev.parent), addr);
  227 + if (parent)
  228 + result = i2cdev_check_mux_parents(parent, addr);
230 229  
231 230 if (!result)
232 231 result = device_for_each_child(&adapter->dev, &addr,
... ... @@ -384,10 +384,15 @@
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 */