media: staging: max96712: Move link frequency setting to device struct

Prepare for supporting MAX96724 by moving the soon device specific link
frequency setting into information structure. This struct will be
extended to carry more differences between the two devices supported.

While at it remove trailing comma in device table, no entries will be
appended after the sentinel.

Signed-off-by: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
This commit is contained in:
Niklas Söderlund 2024-10-02 11:23:29 +02:00 committed by Mauro Carvalho Chehab
parent aa1e8e1842
commit 2536a0715f

View File

@ -16,18 +16,22 @@
#include <media/v4l2-fwnode.h>
#include <media/v4l2-subdev.h>
#define MAX96712_DPLL_FREQ 1000
enum max96712_pattern {
MAX96712_PATTERN_CHECKERBOARD = 0,
MAX96712_PATTERN_GRADIENT,
};
struct max96712_info {
unsigned int dpllfreq;
};
struct max96712_priv {
struct i2c_client *client;
struct regmap *regmap;
struct gpio_desc *gpiod_pwdn;
const struct max96712_info *info;
bool cphy;
struct v4l2_mbus_config_mipi_csi2 mipi;
@ -138,9 +142,9 @@ static void max96712_mipi_configure(struct max96712_priv *priv)
/* Set link frequency for PHY0 and PHY1. */
max96712_update_bits(priv, 0x415, 0x3f,
((MAX96712_DPLL_FREQ / 100) & 0x1f) | BIT(5));
((priv->info->dpllfreq / 100) & 0x1f) | BIT(5));
max96712_update_bits(priv, 0x418, 0x3f,
((MAX96712_DPLL_FREQ / 100) & 0x1f) | BIT(5));
((priv->info->dpllfreq / 100) & 0x1f) | BIT(5));
/* Enable PHY0 and PHY1 */
max96712_update_bits(priv, 0x8a2, 0xf0, 0x30);
@ -302,7 +306,7 @@ static int max96712_v4l2_register(struct max96712_priv *priv)
* TODO: Once V4L2_CID_LINK_FREQ is changed from a menu control to an
* INT64 control it should be used here instead of V4L2_CID_PIXEL_RATE.
*/
pixel_rate = MAX96712_DPLL_FREQ / priv->mipi.num_data_lanes * 1000000;
pixel_rate = priv->info->dpllfreq / priv->mipi.num_data_lanes * 1000000;
v4l2_ctrl_new_std(&priv->ctrl_handler, NULL, V4L2_CID_PIXEL_RATE,
pixel_rate, pixel_rate, 1, pixel_rate);
@ -405,6 +409,8 @@ static int max96712_probe(struct i2c_client *client)
if (!priv)
return -ENOMEM;
priv->info = of_device_get_match_data(&client->dev);
priv->client = client;
i2c_set_clientdata(client, priv);
@ -443,9 +449,13 @@ static void max96712_remove(struct i2c_client *client)
gpiod_set_value_cansleep(priv->gpiod_pwdn, 0);
}
static const struct max96712_info max96712_info_max96712 = {
.dpllfreq = 1000,
};
static const struct of_device_id max96712_of_table[] = {
{ .compatible = "maxim,max96712" },
{ /* sentinel */ },
{ .compatible = "maxim,max96712", .data = &max96712_info_max96712 },
{ /* sentinel */ }
};
MODULE_DEVICE_TABLE(of, max96712_of_table);