mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-16 22:25:13 -05:00
media: mt9m114: Set pad-slew-rate
The MT9M114 supports the different slew rates (0 to 7) on the output pads. At the moment, this is hardcoded to 7 (the fastest rate). The user might want to change this values due to EMC requirements. Read the 'slew-rate' from the DT and configure the pad slew rates of the output pads accordingly in mt9m114_initialize(). Remove the hardcoded slew rate setting from the mt9m114_init table. Signed-off-by: Mathis Foerst <mathis.foerst@mt.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org>
This commit is contained in:
committed by
Hans Verkuil
parent
b541288c51
commit
9db72db296
@@ -18,6 +18,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <linux/property.h>
|
||||
#include <linux/regmap.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
#include <linux/types.h>
|
||||
@@ -42,6 +43,9 @@
|
||||
#define MT9M114_RESET_AND_MISC_CONTROL CCI_REG16(0x001a)
|
||||
#define MT9M114_RESET_SOC BIT(0)
|
||||
#define MT9M114_PAD_SLEW CCI_REG16(0x001e)
|
||||
#define MT9M114_PAD_SLEW_MIN 0
|
||||
#define MT9M114_PAD_SLEW_MAX 7
|
||||
#define MT9M114_PAD_SLEW_DEFAULT 7
|
||||
#define MT9M114_PAD_CONTROL CCI_REG16(0x0032)
|
||||
|
||||
/* XDMA registers */
|
||||
@@ -388,6 +392,7 @@ struct mt9m114 {
|
||||
|
||||
unsigned int pixrate;
|
||||
bool streaming;
|
||||
u32 pad_slew_rate;
|
||||
|
||||
/* Pixel Array */
|
||||
struct {
|
||||
@@ -645,9 +650,6 @@ static const struct cci_reg_sequence mt9m114_init[] = {
|
||||
{ MT9M114_CAM_SENSOR_CFG_FINE_INTEG_TIME_MAX, 1459 },
|
||||
{ MT9M114_CAM_SENSOR_CFG_FINE_CORRECTION, 96 },
|
||||
{ MT9M114_CAM_SENSOR_CFG_REG_0_DATA, 32 },
|
||||
|
||||
/* Miscellaneous settings */
|
||||
{ MT9M114_PAD_SLEW, 0x0777 },
|
||||
};
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
@@ -779,6 +781,13 @@ static int mt9m114_initialize(struct mt9m114 *sensor)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
value = sensor->pad_slew_rate
|
||||
| sensor->pad_slew_rate << 4
|
||||
| sensor->pad_slew_rate << 8;
|
||||
cci_write(sensor->regmap, MT9M114_PAD_SLEW, value, &ret);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = mt9m114_set_state(sensor, MT9M114_SYS_STATE_ENTER_CONFIG_CHANGE);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -2382,6 +2391,17 @@ static int mt9m114_parse_dt(struct mt9m114 *sensor)
|
||||
goto error;
|
||||
}
|
||||
|
||||
sensor->pad_slew_rate = MT9M114_PAD_SLEW_DEFAULT;
|
||||
device_property_read_u32(&sensor->client->dev, "slew-rate",
|
||||
&sensor->pad_slew_rate);
|
||||
|
||||
if (sensor->pad_slew_rate < MT9M114_PAD_SLEW_MIN ||
|
||||
sensor->pad_slew_rate > MT9M114_PAD_SLEW_MAX) {
|
||||
dev_err(&sensor->client->dev, "Invalid slew-rate %u\n",
|
||||
sensor->pad_slew_rate);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
error:
|
||||
|
||||
Reference in New Issue
Block a user