SMIA++ driver improvements
cover SMIA++ driver improvements
Hi,
The first one of these two small patches fixes a minor issue in format enumeration from the sensor, whereas the second one provides the module identification information to the user space through a sysfs file.
Regards,
Signature · 2 lines
Sakari Ailus [email protected]
PATCH 1/2 smiapp: Use highest bits-per-pixel for sensor internal format
The format shown on the links internal to the sensor was the first one enumerated from the sensor, not the highest bit depth data that can be produced by the sensor. Correct this.
Signed-off-by Sakari Ailus <[email protected]>
--- drivers/media/i2c/smiapp/smiapp-core.c | 6 +++++- 1 files changed, 5 insertions(+), 1 deletions(-)
drivers/media/i2c/smiapp/smiapp-core.c +5 -1
@@ -777,7 +777,11 @@ static int smiapp_get_mbus_formats(struct smiapp_sensor *sensor)dev_dbg (&client->dev,"jolly good! %d\n" , j); sensor->default_mbus_frame_fmts |=1 << j; -if (!sensor->csi_format) { +if (!sensor->csi_format + || f->width > sensor->csi_format->width + || (f->width == sensor->csi_format->width + && f->compressed + > sensor->csi_format->compressed)) { sensor->csi_format = f; sensor->internal_csi_format = f; }
Signature · 1 line
1.7.2.5
PATCH 2/2 smiapp: Provide module identification information through sysfs
In reply to Sakari AilusFrom: Sakari Ailus <[email protected]>
Provide module ident information through sysfs.
Signed-off-by Sakari Ailus <[email protected]>
--- drivers/media/i2c/smiapp/smiapp-core.c | 28 ++++++++++++++++++++++++++-- 1 files changed, 26 insertions(+), 2 deletions(-)
drivers/media/i2c/smiapp/smiapp-core.c +26 -2
@@ -2211,6 +2211,21 @@ smiapp_sysfs_nvm_read(struct device *dev, struct device_attribute *attr, } static DEVICE_ATTR(nvm, S_IRUGO, smiapp_sysfs_nvm_read, NULL); +static ssize_t +smiapp_sysfs_ident_read (struct device *dev,struct device_attribute *attr, +char *buf) +{ +struct v4l2_subdev *subdev =i2c_get_clientdata (to_i2c_client (dev)); +struct smiapp_sensor *sensor =to_smiapp_sensor (subdev); +struct smiapp_module_info *minfo = &sensor->minfo; + +return snprintf (buf,PAGE_SIZE ,"%2.2x%4.4x%2.2x\n" , + minfo->manufacturer_id, minfo->model_id, + minfo->revision_number_major) +1 ; +} + +static DEVICE_ATTR(ident, S_IRUGO, smiapp_sysfs_ident_read, NULL); +/* ----------------------------------------------------------------------------- * V4L2 subdev core operations */
@@ -2467,6 +2482,11 @@ static int smiapp_registered(struct v4l2_subdev *subdev) sensor->binning_horizontal =1 ; sensor->binning_vertical =1 ; +if (device_create_file (&client->dev, &dev_attr_ident) !=0 ) { +dev_err (&client->dev,"sysfs ident entry creation failed\n" ); + rval = -ENOENT ; + goto out_power_off; + }/* SMIA++ NVM initialization - it will be read from the sensor * when it is first requested by userspace. */
@@ -2476,13 +2496,13 @@ static int smiapp_registered(struct v4l2_subdev *subdev)if (sensor->nvm ==NULL ) {dev_err (&client->dev,"nvm buf allocation failed\n" ); rval = -ENOMEM ; - goto out_power_off; + goto out_ident_release; }if (device_create_file (&client->dev, &dev_attr_nvm) !=0 ) {dev_err (&client->dev,"sysfs nvm entry failed\n" ); rval = -EBUSY ; - goto out_power_off; + goto out_ident_release; } }
@@ -2637,6 +2657,9 @@ static int smiapp_registered(struct v4l2_subdev *subdev) out_nvm_release:device_remove_file (&client->dev, &dev_attr_nvm); +out_ident_release: +device_remove_file (&client->dev, &dev_attr_ident); + out_power_off:smiapp_power_off (sensor);
@@ -2832,6 +2855,7 @@ static int __exit smiapp_remove(struct i2c_client *client) sensor->power_count =0 ; } +device_remove_file (&client->dev, &dev_attr_ident);if (sensor->nvm)device_remove_file (&client->dev, &dev_attr_nvm);
Signature · 1 line
1.7.2.5