i2c: mux: Allow muxes to work as children of i2c bus without i2c-parent
For mux check if the parent is already a device of UCLASS_I2C and if yes just use that. Otherwise see if someone specified an i2c-parent phandle. This mimics the behavior found in the Kernel, as it removes the requirement to explicitly specify a i2c-parent phandle. Signed-off-by: Moritz Fischer <moritz.fischer@ettus.com> Cc: Heiko Schocher <hs@denx.de> Cc: Bin Meng <bmeng.cn@gmail.com> Cc: Simon Glass <sjg@chromium.org> Cc: Michal Simek <michal.simek@xilinx.com> Cc: u-boot@lists.denx.de
This commit is contained in:
		
							parent
							
								
									bfd07670a4
								
							
						
					
					
						commit
						12e8d58415
					
				| 
						 | 
					@ -86,6 +86,16 @@ static int i2c_mux_post_probe(struct udevice *mux)
 | 
				
			||||||
	debug("%s: %s\n", __func__, mux->name);
 | 
						debug("%s: %s\n", __func__, mux->name);
 | 
				
			||||||
	priv->selected = -1;
 | 
						priv->selected = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						/* if parent is of i2c uclass already, we'll take that, otherwise
 | 
				
			||||||
 | 
						 * look if we find an i2c-parent phandle
 | 
				
			||||||
 | 
						 */
 | 
				
			||||||
 | 
						if (UCLASS_I2C == device_get_uclass_id(mux->parent)) {
 | 
				
			||||||
 | 
							priv->i2c_bus = dev_get_parent(mux);
 | 
				
			||||||
 | 
							debug("%s: bus=%p/%s\n", __func__, priv->i2c_bus,
 | 
				
			||||||
 | 
							      priv->i2c_bus->name);
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	ret = uclass_get_device_by_phandle(UCLASS_I2C, mux, "i2c-parent",
 | 
						ret = uclass_get_device_by_phandle(UCLASS_I2C, mux, "i2c-parent",
 | 
				
			||||||
					   &priv->i2c_bus);
 | 
										   &priv->i2c_bus);
 | 
				
			||||||
	if (ret)
 | 
						if (ret)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue