Commit 0d825a12 authored by Sakari Ailus's avatar Sakari Ailus Committed by Mauro Carvalho Chehab

[media] smiapp: Replace pll_flags quirk with more generic init quirk

The pll_flags quirk just returned the extra PLL flags the sensor required,
but the init quirk is far more versatile. It can be used to perform any
extra initialisation needed by the sensor, including allocating memory for
sensor specific struct and creating sensor specific new controls.
Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 5313c002
...@@ -2697,7 +2697,6 @@ static int smiapp_init(struct smiapp_sensor *sensor) ...@@ -2697,7 +2697,6 @@ static int smiapp_init(struct smiapp_sensor *sensor)
pll->bus_type = SMIAPP_PLL_BUS_TYPE_CSI2; pll->bus_type = SMIAPP_PLL_BUS_TYPE_CSI2;
pll->csi2.lanes = sensor->platform_data->lanes; pll->csi2.lanes = sensor->platform_data->lanes;
pll->ext_clk_freq_hz = sensor->platform_data->ext_clk; pll->ext_clk_freq_hz = sensor->platform_data->ext_clk;
pll->flags = smiapp_call_quirk(sensor, pll_flags);
pll->scale_n = sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN]; pll->scale_n = sensor->limits[SMIAPP_LIMIT_SCALER_N_MIN];
/* Profile 0 sensors have no separate OP clock branch. */ /* Profile 0 sensors have no separate OP clock branch. */
if (sensor->minfo.smiapp_profile == SMIAPP_PROFILE_0) if (sensor->minfo.smiapp_profile == SMIAPP_PROFILE_0)
...@@ -2772,6 +2771,10 @@ static int smiapp_init(struct smiapp_sensor *sensor) ...@@ -2772,6 +2771,10 @@ static int smiapp_init(struct smiapp_sensor *sensor)
if (rval < 0) if (rval < 0)
goto out_cleanup; goto out_cleanup;
rval = smiapp_call_quirk(sensor, init);
if (rval)
goto out_cleanup;
rval = smiapp_get_mbus_formats(sensor); rval = smiapp_get_mbus_formats(sensor);
if (rval) { if (rval) {
rval = -ENODEV; rval = -ENODEV;
......
...@@ -214,9 +214,11 @@ static int jt8ev1_post_streamoff(struct smiapp_sensor *sensor) ...@@ -214,9 +214,11 @@ static int jt8ev1_post_streamoff(struct smiapp_sensor *sensor)
return smiapp_write_8(sensor, 0x3328, 0x80); return smiapp_write_8(sensor, 0x3328, 0x80);
} }
static unsigned long jt8ev1_pll_flags(struct smiapp_sensor *sensor) static int jt8ev1_init(struct smiapp_sensor *sensor)
{ {
return SMIAPP_PLL_FLAG_OP_PIX_CLOCK_PER_LANE; sensor->pll.flags |= SMIAPP_PLL_FLAG_OP_PIX_CLOCK_PER_LANE;
return 0;
} }
const struct smiapp_quirk smiapp_jt8ev1_quirk = { const struct smiapp_quirk smiapp_jt8ev1_quirk = {
...@@ -224,7 +226,7 @@ const struct smiapp_quirk smiapp_jt8ev1_quirk = { ...@@ -224,7 +226,7 @@ const struct smiapp_quirk smiapp_jt8ev1_quirk = {
.post_poweron = jt8ev1_post_poweron, .post_poweron = jt8ev1_post_poweron,
.pre_streamon = jt8ev1_pre_streamon, .pre_streamon = jt8ev1_pre_streamon,
.post_streamoff = jt8ev1_post_streamoff, .post_streamoff = jt8ev1_post_streamoff,
.pll_flags = jt8ev1_pll_flags, .init = jt8ev1_init,
}; };
static int tcm8500md_limits(struct smiapp_sensor *sensor) static int tcm8500md_limits(struct smiapp_sensor *sensor)
......
...@@ -29,6 +29,9 @@ struct smiapp_sensor; ...@@ -29,6 +29,9 @@ struct smiapp_sensor;
* @post_poweron: Called always after the sensor has been fully powered on. * @post_poweron: Called always after the sensor has been fully powered on.
* @pre_streamon: Called just before streaming is enabled. * @pre_streamon: Called just before streaming is enabled.
* @post_streamon: Called right after stopping streaming. * @post_streamon: Called right after stopping streaming.
* @pll_flags: Return flags for the PLL calculator.
* @init: Quirk initialisation, called the last in probe(). This is
* also appropriate for adding sensor specific controls, for instance.
* @reg_access: Register access quirk. The quirk may divert the access * @reg_access: Register access quirk. The quirk may divert the access
* to another register, or no register at all. * to another register, or no register at all.
* *
...@@ -47,6 +50,7 @@ struct smiapp_quirk { ...@@ -47,6 +50,7 @@ struct smiapp_quirk {
int (*pre_streamon)(struct smiapp_sensor *sensor); int (*pre_streamon)(struct smiapp_sensor *sensor);
int (*post_streamoff)(struct smiapp_sensor *sensor); int (*post_streamoff)(struct smiapp_sensor *sensor);
unsigned long (*pll_flags)(struct smiapp_sensor *sensor); unsigned long (*pll_flags)(struct smiapp_sensor *sensor);
int (*init)(struct smiapp_sensor *sensor);
int (*reg_access)(struct smiapp_sensor *sensor, bool write, u32 *reg, int (*reg_access)(struct smiapp_sensor *sensor, bool write, u32 *reg,
u32 *val); u32 *val);
unsigned long flags; unsigned long flags;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment