forked from mirrors/linux
		
	i2c: Allow i2c_add_numbered_adapter() to assign a bus id
Currently, if an i2c bus driver supports both static and dynamic bus ids, it needs to choose between calling i2c_add_numbered_adapter() and i2c_add_adapter(). This patch makes i2c_add_numbered_adapter() redirect to i2c_add_adapter() if the requested bus id is -1. Signed-off-by: Grant Likely <grant.likely@secretlab.ca> Signed-off-by: Jean Delvare <khali@linux-fr.org>
This commit is contained in:
		
							parent
							
								
									3fea5df41d
								
							
						
					
					
						commit
						488bf314bf
					
				
					 4 changed files with 10 additions and 14 deletions
				
			
		| 
						 | 
					@ -662,11 +662,8 @@ static int __devinit cpm_i2c_probe(struct platform_device *ofdev)
 | 
				
			||||||
	/* register new adapter to i2c module... */
 | 
						/* register new adapter to i2c module... */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	data = of_get_property(ofdev->dev.of_node, "linux,i2c-index", &len);
 | 
						data = of_get_property(ofdev->dev.of_node, "linux,i2c-index", &len);
 | 
				
			||||||
	if (data && len == 4) {
 | 
						cpm->adap.nr = (data && len == 4) ? be32_to_cpup(data) : -1;
 | 
				
			||||||
		cpm->adap.nr = *data;
 | 
						result = i2c_add_numbered_adapter(&cpm->adap);
 | 
				
			||||||
		result = i2c_add_numbered_adapter(&cpm->adap);
 | 
					 | 
				
			||||||
	} else
 | 
					 | 
				
			||||||
		result = i2c_add_adapter(&cpm->adap);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (result < 0) {
 | 
						if (result < 0) {
 | 
				
			||||||
		dev_err(&ofdev->dev, "Unable to register with I2C\n");
 | 
							dev_err(&ofdev->dev, "Unable to register with I2C\n");
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1079,7 +1079,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
 | 
				
			||||||
	 * The reason to do so is to avoid sysfs names that only make
 | 
						 * The reason to do so is to avoid sysfs names that only make
 | 
				
			||||||
	 * sense when there are multiple adapters.
 | 
						 * sense when there are multiple adapters.
 | 
				
			||||||
	 */
 | 
						 */
 | 
				
			||||||
	i2c->adap.nr = dev->id != -1 ? dev->id : 0;
 | 
						i2c->adap.nr = dev->id;
 | 
				
			||||||
	snprintf(i2c->adap.name, sizeof(i2c->adap.name), "pxa_i2c-i2c.%u",
 | 
						snprintf(i2c->adap.name, sizeof(i2c->adap.name), "pxa_i2c-i2c.%u",
 | 
				
			||||||
		 i2c->adap.nr);
 | 
							 i2c->adap.nr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1142,10 +1142,7 @@ static int i2c_pxa_probe(struct platform_device *dev)
 | 
				
			||||||
	i2c->adap.dev.of_node = dev->dev.of_node;
 | 
						i2c->adap.dev.of_node = dev->dev.of_node;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (i2c_type == REGS_CE4100)
 | 
						ret = i2c_add_numbered_adapter(&i2c->adap);
 | 
				
			||||||
		ret = i2c_add_adapter(&i2c->adap);
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		ret = i2c_add_numbered_adapter(&i2c->adap);
 | 
					 | 
				
			||||||
	if (ret < 0) {
 | 
						if (ret < 0) {
 | 
				
			||||||
		printk(KERN_INFO "I2C: Failed to add bus\n");
 | 
							printk(KERN_INFO "I2C: Failed to add bus\n");
 | 
				
			||||||
		goto eadapt;
 | 
							goto eadapt;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -341,10 +341,7 @@ static int __devinit s6i2c_probe(struct platform_device *dev)
 | 
				
			||||||
	i2c_wr16(iface, S6_I2C_TXTL, 0);
 | 
						i2c_wr16(iface, S6_I2C_TXTL, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	platform_set_drvdata(dev, iface);
 | 
						platform_set_drvdata(dev, iface);
 | 
				
			||||||
	if (bus_num < 0)
 | 
						rc = i2c_add_numbered_adapter(p_adap);
 | 
				
			||||||
		rc = i2c_add_adapter(p_adap);
 | 
					 | 
				
			||||||
	else
 | 
					 | 
				
			||||||
		rc = i2c_add_numbered_adapter(p_adap);
 | 
					 | 
				
			||||||
	if (rc)
 | 
						if (rc)
 | 
				
			||||||
		goto err_irq_free;
 | 
							goto err_irq_free;
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -925,6 +925,9 @@ EXPORT_SYMBOL(i2c_add_adapter);
 | 
				
			||||||
 * or otherwise built in to the system's mainboard, and where i2c_board_info
 | 
					 * or otherwise built in to the system's mainboard, and where i2c_board_info
 | 
				
			||||||
 * is used to properly configure I2C devices.
 | 
					 * is used to properly configure I2C devices.
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 | 
					 * If the requested bus number is set to -1, then this function will behave
 | 
				
			||||||
 | 
					 * identically to i2c_add_adapter, and will dynamically assign a bus number.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 * If no devices have pre-been declared for this bus, then be sure to
 | 
					 * If no devices have pre-been declared for this bus, then be sure to
 | 
				
			||||||
 * register the adapter before any dynamically allocated ones.  Otherwise
 | 
					 * register the adapter before any dynamically allocated ones.  Otherwise
 | 
				
			||||||
 * the required bus ID may not be available.
 | 
					 * the required bus ID may not be available.
 | 
				
			||||||
| 
						 | 
					@ -940,6 +943,8 @@ int i2c_add_numbered_adapter(struct i2c_adapter *adap)
 | 
				
			||||||
	int	id;
 | 
						int	id;
 | 
				
			||||||
	int	status;
 | 
						int	status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (adap->nr == -1) /* -1 means dynamically assign bus id */
 | 
				
			||||||
 | 
							return i2c_add_adapter(adap);
 | 
				
			||||||
	if (adap->nr & ~MAX_ID_MASK)
 | 
						if (adap->nr & ~MAX_ID_MASK)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue