diff options
Diffstat (limited to 'drivers/media/pci/intel/ipu3/cio2-bridge.c')
| -rw-r--r-- | drivers/media/pci/intel/ipu3/cio2-bridge.c | 23 | 
1 files changed, 19 insertions, 4 deletions
diff --git a/drivers/media/pci/intel/ipu3/cio2-bridge.c b/drivers/media/pci/intel/ipu3/cio2-bridge.c index dfefe0d8aa95..3c2accfe5455 100644 --- a/drivers/media/pci/intel/ipu3/cio2-bridge.c +++ b/drivers/media/pci/intel/ipu3/cio2-bridge.c @@ -29,6 +29,14 @@ static const struct cio2_sensor_config cio2_supported_sensors[] = {  	CIO2_SENSOR_CONFIG("INT347E", 1, 319200000),  	/* Omnivision OV2680 */  	CIO2_SENSOR_CONFIG("OVTI2680", 0), +	/* Omnivision ov8856 */ +	CIO2_SENSOR_CONFIG("OVTI8856", 3, 180000000, 360000000, 720000000), +	/* Omnivision ov2740 */ +	CIO2_SENSOR_CONFIG("INT3474", 1, 360000000), +	/* Hynix hi556 */ +	CIO2_SENSOR_CONFIG("INT3537", 1, 437000000), +	/* Omnivision ov13b10 */ +	CIO2_SENSOR_CONFIG("OVTIDB10", 1, 560000000),  };  static const struct cio2_property_names prop_names = { @@ -212,6 +220,7 @@ static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,  						  struct cio2_sensor *sensor)  {  	struct software_node *nodes = sensor->swnodes; +	char vcm_name[ACPI_ID_LEN + 4];  	cio2_bridge_init_swnode_names(sensor); @@ -229,9 +238,13 @@ static void cio2_bridge_create_connection_swnodes(struct cio2_bridge *bridge,  						sensor->node_names.endpoint,  						&nodes[SWNODE_CIO2_PORT],  						sensor->cio2_properties); -	if (sensor->ssdb.vcmtype) -		nodes[SWNODE_VCM] = -			NODE_VCM(cio2_vcm_types[sensor->ssdb.vcmtype - 1]); +	if (sensor->ssdb.vcmtype) { +		/* append ssdb.link to distinguish VCM nodes with same HID */ +		snprintf(vcm_name, sizeof(vcm_name), "%s-%u", +			 cio2_vcm_types[sensor->ssdb.vcmtype - 1], +			 sensor->ssdb.link); +		nodes[SWNODE_VCM] = NODE_VCM(vcm_name); +	}  	cio2_bridge_init_swnode_group(sensor);  } @@ -295,7 +308,6 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,  		}  		sensor = &bridge->sensors[bridge->n_sensors]; -		strscpy(sensor->name, cfg->hid, sizeof(sensor->name));  		ret = cio2_bridge_read_acpi_buffer(adev, "SSDB",  						   &sensor->ssdb, @@ -303,6 +315,9 @@ static int cio2_bridge_connect_sensor(const struct cio2_sensor_config *cfg,  		if (ret)  			goto err_put_adev; +		snprintf(sensor->name, sizeof(sensor->name), "%s-%u", +			 cfg->hid, sensor->ssdb.link); +  		if (sensor->ssdb.vcmtype > ARRAY_SIZE(cio2_vcm_types)) {  			dev_warn(&adev->dev, "Unknown VCM type %d\n",  				 sensor->ssdb.vcmtype);  |