linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: linux-media@vger.kernel.org
Subject: [PATCH 031/100] ccs: Make hwcfg part of the device specific struct
Date: Wed, 30 Sep 2020 18:27:49 +0300	[thread overview]
Message-ID: <20200930152858.8471-32-sakari.ailus@linux.intel.com> (raw)
In-Reply-To: <20200930152858.8471-1-sakari.ailus@linux.intel.com>

There's no need to allocate the hardware configuration struct separately.
Put it in struct ccs_sensor.

Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
---
 drivers/media/i2c/ccs/ccs-core.c  | 94 ++++++++++++++++---------------
 drivers/media/i2c/ccs/ccs-quirk.c |  4 +-
 drivers/media/i2c/ccs/ccs.h       |  2 +-
 3 files changed, 51 insertions(+), 49 deletions(-)

diff --git a/drivers/media/i2c/ccs/ccs-core.c b/drivers/media/i2c/ccs/ccs-core.c
index 610a2d22a5ca..d8553aba00c8 100644
--- a/drivers/media/i2c/ccs/ccs-core.c
+++ b/drivers/media/i2c/ccs/ccs-core.c
@@ -803,7 +803,7 @@ static int ccs_init_late_controls(struct ccs_sensor *sensor)
 	sensor->link_freq = v4l2_ctrl_new_int_menu(
 		&sensor->src->ctrl_handler, &ccs_ctrl_ops,
 		V4L2_CID_LINK_FREQ, __fls(*valid_link_freqs),
-		__ffs(*valid_link_freqs), sensor->hwcfg->op_sys_clock);
+		__ffs(*valid_link_freqs), sensor->hwcfg.op_sys_clock);
 
 	return sensor->src->ctrl_handler.error;
 }
@@ -916,8 +916,8 @@ static int ccs_get_mbus_formats(struct ccs_sensor *sensor)
 
 		pll->bits_per_pixel = f->compressed;
 
-		for (j = 0; sensor->hwcfg->op_sys_clock[j]; j++) {
-			pll->link_freq = sensor->hwcfg->op_sys_clock[j];
+		for (j = 0; sensor->hwcfg.op_sys_clock[j]; j++) {
+			pll->link_freq = sensor->hwcfg.op_sys_clock[j];
 
 			rval = ccs_pll_try(sensor, pll);
 			dev_dbg(&client->dev, "link freq %u Hz, bpp %u %s\n",
@@ -1117,21 +1117,21 @@ static int ccs_change_cci_addr(struct ccs_sensor *sensor)
 	int rval;
 	u32 val;
 
-	client->addr = sensor->hwcfg->i2c_addr_dfl;
+	client->addr = sensor->hwcfg.i2c_addr_dfl;
 
 	rval = ccs_write(sensor, CCI_ADDRESS_CTRL,
-			 sensor->hwcfg->i2c_addr_alt << 1);
+			 sensor->hwcfg.i2c_addr_alt << 1);
 	if (rval)
 		return rval;
 
-	client->addr = sensor->hwcfg->i2c_addr_alt;
+	client->addr = sensor->hwcfg.i2c_addr_alt;
 
 	/* verify addr change went ok */
 	rval = ccs_read(sensor, CCI_ADDRESS_CTRL, &val);
 	if (rval)
 		return rval;
 
-	if (val != sensor->hwcfg->i2c_addr_alt << 1)
+	if (val != sensor->hwcfg.i2c_addr_alt << 1)
 		return -ENODEV;
 
 	return 0;
@@ -1145,13 +1145,13 @@ static int ccs_change_cci_addr(struct ccs_sensor *sensor)
 static int ccs_setup_flash_strobe(struct ccs_sensor *sensor)
 {
 	struct ccs_flash_strobe_parms *strobe_setup;
-	unsigned int ext_freq = sensor->hwcfg->ext_clk;
+	unsigned int ext_freq = sensor->hwcfg.ext_clk;
 	u32 tmp;
 	u32 strobe_adjustment;
 	u32 strobe_width_high_rs;
 	int rval;
 
-	strobe_setup = sensor->hwcfg->strobe_setup;
+	strobe_setup = sensor->hwcfg.strobe_setup;
 
 	/*
 	 * How to calculate registers related to strobe length. Please
@@ -1259,7 +1259,7 @@ static int ccs_setup_flash_strobe(struct ccs_sensor *sensor)
 	rval = ccs_write(sensor, FLASH_TRIGGER_RS, strobe_setup->trigger);
 
 out:
-	sensor->hwcfg->strobe_setup->trigger = 0;
+	sensor->hwcfg.strobe_setup->trigger = 0;
 
 	return rval;
 }
@@ -1298,7 +1298,7 @@ static int ccs_power_on(struct device *dev)
 	gpiod_set_value(sensor->reset, 0);
 	gpiod_set_value(sensor->xshutdown, 1);
 
-	sleep = SMIAPP_RESET_DELAY(sensor->hwcfg->ext_clk);
+	sleep = SMIAPP_RESET_DELAY(sensor->hwcfg.ext_clk);
 	usleep_range(sleep, sleep);
 
 	/*
@@ -1312,7 +1312,7 @@ static int ccs_power_on(struct device *dev)
 	 * is found.
 	 */
 
-	if (sensor->hwcfg->i2c_addr_alt) {
+	if (sensor->hwcfg.i2c_addr_alt) {
 		rval = ccs_change_cci_addr(sensor);
 		if (rval) {
 			dev_err(dev, "cci address change error\n");
@@ -1326,7 +1326,7 @@ static int ccs_power_on(struct device *dev)
 		goto out_cci_addr_fail;
 	}
 
-	if (sensor->hwcfg->i2c_addr_alt) {
+	if (sensor->hwcfg.i2c_addr_alt) {
 		rval = ccs_change_cci_addr(sensor);
 		if (rval) {
 			dev_err(dev, "cci address change error\n");
@@ -1342,13 +1342,13 @@ static int ccs_power_on(struct device *dev)
 	}
 
 	rval = ccs_write(sensor, EXTCLK_FREQUENCY_MHZ,
-			 sensor->hwcfg->ext_clk / (1000000 / (1 << 8)));
+			 sensor->hwcfg.ext_clk / (1000000 / (1 << 8)));
 	if (rval) {
 		dev_err(dev, "extclk frequency set failed\n");
 		goto out_cci_addr_fail;
 	}
 
-	rval = ccs_write(sensor, CSI_LANE_MODE, sensor->hwcfg->lanes - 1);
+	rval = ccs_write(sensor, CSI_LANE_MODE, sensor->hwcfg.lanes - 1);
 	if (rval) {
 		dev_err(dev, "csi lane mode set failed\n");
 		goto out_cci_addr_fail;
@@ -1362,7 +1362,7 @@ static int ccs_power_on(struct device *dev)
 	}
 
 	rval = ccs_write(sensor, CSI_SIGNALING_MODE,
-			 sensor->hwcfg->csi_signalling_mode);
+			 sensor->hwcfg.csi_signalling_mode);
 	if (rval) {
 		dev_err(dev, "csi signalling mode set failed\n");
 		goto out_cci_addr_fail;
@@ -1406,7 +1406,7 @@ static int ccs_power_off(struct device *dev)
 	 * really see a power off and next time the cci address change
 	 * will fail. So do a soft reset explicitly here.
 	 */
-	if (sensor->hwcfg->i2c_addr_alt)
+	if (sensor->hwcfg.i2c_addr_alt)
 		ccs_write(sensor, SOFTWARE_RESET, CCS_SOFTWARE_RESET_ON);
 
 	gpiod_set_value(sensor->reset, 1);
@@ -1545,8 +1545,8 @@ static int ccs_start_streaming(struct ccs_sensor *sensor)
 	if (CCS_LIM(sensor, FLASH_MODE_CAPABILITY) &
 	    (CCS_FLASH_MODE_CAPABILITY_SINGLE_STROBE |
 	     SMIAPP_FLASH_MODE_CAPABILITY_MULTIPLE_STROBE) &&
-	    sensor->hwcfg->strobe_setup != NULL &&
-	    sensor->hwcfg->strobe_setup->trigger != 0) {
+	    sensor->hwcfg.strobe_setup != NULL &&
+	    sensor->hwcfg.strobe_setup->trigger != 0) {
 		rval = ccs_setup_flash_strobe(sensor);
 		if (rval)
 			goto out;
@@ -2844,9 +2844,9 @@ static int __maybe_unused ccs_resume(struct device *dev)
 	return rval;
 }
 
-static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
+static int ccs_get_hwconfig(struct ccs_sensor *sensor, struct device *dev)
 {
-	struct ccs_hwconfig *hwcfg;
+	struct ccs_hwconfig *hwcfg = &sensor->hwcfg;
 	struct v4l2_fwnode_endpoint bus_cfg = { .bus_type = 0 };
 	struct fwnode_handle *ep;
 	struct fwnode_handle *fwnode = dev_fwnode(dev);
@@ -2856,7 +2856,7 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 
 	ep = fwnode_graph_get_next_endpoint(fwnode, NULL);
 	if (!ep)
-		return NULL;
+		return -ENODEV;
 
 	bus_cfg.bus_type = V4L2_MBUS_CSI2_DPHY;
 	rval = v4l2_fwnode_endpoint_alloc_parse(ep, &bus_cfg);
@@ -2868,10 +2868,6 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 	if (rval)
 		goto out_err;
 
-	hwcfg = devm_kzalloc(dev, sizeof(*hwcfg), GFP_KERNEL);
-	if (!hwcfg)
-		goto out_err;
-
 	switch (bus_cfg.bus_type) {
 	case V4L2_MBUS_CSI2_DPHY:
 		hwcfg->csi_signalling_mode = CCS_CSI_SIGNALING_MODE_CSI_2_DPHY;
@@ -2885,6 +2881,7 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 		break;
 	default:
 		dev_err(dev, "unsupported bus %u\n", bus_cfg.bus_type);
+		rval = -EINVAL;
 		goto out_err;
 	}
 
@@ -2901,6 +2898,7 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 			break;
 		default:
 			dev_err(dev, "invalid rotation %u\n", rotation);
+			rval = -EINVAL;
 			goto out_err;
 		}
 	}
@@ -2915,14 +2913,17 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 
 	if (!bus_cfg.nr_of_link_frequencies) {
 		dev_warn(dev, "no link frequencies defined\n");
+		rval = -EINVAL;
 		goto out_err;
 	}
 
 	hwcfg->op_sys_clock = devm_kcalloc(
 		dev, bus_cfg.nr_of_link_frequencies + 1 /* guardian */,
 		sizeof(*hwcfg->op_sys_clock), GFP_KERNEL);
-	if (!hwcfg->op_sys_clock)
+	if (!hwcfg->op_sys_clock) {
+		rval = -ENOMEM;
 		goto out_err;
+	}
 
 	for (i = 0; i < bus_cfg.nr_of_link_frequencies; i++) {
 		hwcfg->op_sys_clock[i] = bus_cfg.link_frequencies[i];
@@ -2931,29 +2932,30 @@ static struct ccs_hwconfig *ccs_get_hwconfig(struct device *dev)
 
 	v4l2_fwnode_endpoint_free(&bus_cfg);
 	fwnode_handle_put(ep);
-	return hwcfg;
+
+	return 0;
 
 out_err:
 	v4l2_fwnode_endpoint_free(&bus_cfg);
 	fwnode_handle_put(ep);
-	return NULL;
+
+	return rval;
 }
 
 static int ccs_probe(struct i2c_client *client)
 {
 	struct ccs_sensor *sensor;
-	struct ccs_hwconfig *hwcfg = ccs_get_hwconfig(&client->dev);
 	unsigned int i;
 	int rval;
 
-	if (hwcfg == NULL)
-		return -ENODEV;
-
 	sensor = devm_kzalloc(&client->dev, sizeof(*sensor), GFP_KERNEL);
 	if (sensor == NULL)
 		return -ENOMEM;
 
-	sensor->hwcfg = hwcfg;
+	rval = ccs_get_hwconfig(sensor, &client->dev);
+	if (rval)
+		return rval;
+
 	sensor->src = &sensor->ssds[sensor->ssds_used];
 
 	v4l2_i2c_subdev_init(&sensor->src->sd, client, &ccs_ops);
@@ -2976,33 +2978,33 @@ static int ccs_probe(struct i2c_client *client)
 	}
 
 	if (sensor->ext_clk) {
-		if (sensor->hwcfg->ext_clk) {
+		if (sensor->hwcfg.ext_clk) {
 			unsigned long rate;
 
 			rval = clk_set_rate(sensor->ext_clk,
-					    sensor->hwcfg->ext_clk);
+					    sensor->hwcfg.ext_clk);
 			if (rval < 0) {
 				dev_err(&client->dev,
 					"unable to set clock freq to %u\n",
-					sensor->hwcfg->ext_clk);
+					sensor->hwcfg.ext_clk);
 				return rval;
 			}
 
 			rate = clk_get_rate(sensor->ext_clk);
-			if (rate != sensor->hwcfg->ext_clk) {
+			if (rate != sensor->hwcfg.ext_clk) {
 				dev_err(&client->dev,
 					"can't set clock freq, asked for %u but got %lu\n",
-					sensor->hwcfg->ext_clk, rate);
+					sensor->hwcfg.ext_clk, rate);
 				return rval;
 			}
 		} else {
-			sensor->hwcfg->ext_clk = clk_get_rate(sensor->ext_clk);
+			sensor->hwcfg.ext_clk = clk_get_rate(sensor->ext_clk);
 			dev_dbg(&client->dev, "obtained clock freq %u\n",
-				sensor->hwcfg->ext_clk);
+				sensor->hwcfg.ext_clk);
 		}
-	} else if (sensor->hwcfg->ext_clk) {
+	} else if (sensor->hwcfg.ext_clk) {
 		dev_dbg(&client->dev, "assuming clock freq %u\n",
-			sensor->hwcfg->ext_clk);
+			sensor->hwcfg.ext_clk);
 	} else {
 		dev_err(&client->dev, "unable to obtain clock freq\n");
 		return -EINVAL;
@@ -3055,7 +3057,7 @@ static int ccs_probe(struct i2c_client *client)
 	 *
 	 * Rotation also changes the bayer pattern.
 	 */
-	if (sensor->hwcfg->module_board_orient ==
+	if (sensor->hwcfg.module_board_orient ==
 	    CCS_MODULE_BOARD_ORIENT_180)
 		sensor->hvflip_inv_mask =
 			CCS_IMAGE_ORIENTATION_HORIZONTAL_MIRROR |
@@ -3127,8 +3129,8 @@ static int ccs_probe(struct i2c_client *client)
 
 	/* prepare PLL configuration input values */
 	sensor->pll.bus_type = SMIAPP_PLL_BUS_TYPE_CSI2;
-	sensor->pll.csi2.lanes = sensor->hwcfg->lanes;
-	sensor->pll.ext_clk_freq_hz = sensor->hwcfg->ext_clk;
+	sensor->pll.csi2.lanes = sensor->hwcfg.lanes;
+	sensor->pll.ext_clk_freq_hz = sensor->hwcfg.ext_clk;
 	sensor->pll.scale_n = CCS_LIM(sensor, SCALER_N_MIN);
 
 	ccs_create_subdev(sensor, sensor->scaler, " scaler", 2,
diff --git a/drivers/media/i2c/ccs/ccs-quirk.c b/drivers/media/i2c/ccs/ccs-quirk.c
index 5a24da1d7aa9..facec28f8447 100644
--- a/drivers/media/i2c/ccs/ccs-quirk.c
+++ b/drivers/media/i2c/ccs/ccs-quirk.c
@@ -152,13 +152,13 @@ static int jt8ev1_post_poweron(struct ccs_sensor *sensor)
 	if (rval < 0)
 		return rval;
 
-	switch (sensor->hwcfg->ext_clk) {
+	switch (sensor->hwcfg.ext_clk) {
 	case 9600000:
 		return ccs_write_addr_8s(sensor, regs_96,
 				       ARRAY_SIZE(regs_96));
 	default:
 		dev_warn(&client->dev, "no MSRs for %d Hz ext_clk\n",
-			 sensor->hwcfg->ext_clk);
+			 sensor->hwcfg.ext_clk);
 		return 0;
 	}
 }
diff --git a/drivers/media/i2c/ccs/ccs.h b/drivers/media/i2c/ccs/ccs.h
index bfe39e02f5e9..2d1e8339f663 100644
--- a/drivers/media/i2c/ccs/ccs.h
+++ b/drivers/media/i2c/ccs/ccs.h
@@ -215,7 +215,7 @@ struct ccs_sensor {
 	struct ccs_subdev *binner;
 	struct ccs_subdev *scaler;
 	struct ccs_subdev *pixel_array;
-	struct ccs_hwconfig *hwcfg;
+	struct ccs_hwconfig hwcfg;
 	struct regulator *vana;
 	struct clk *ext_clk;
 	struct gpio_desc *xshutdown;
-- 
2.27.0


  parent reply	other threads:[~2020-09-30 15:30 UTC|newest]

Thread overview: 101+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-30 15:27 [PATCH 000/100] CCS driver Sakari Ailus
2020-09-30 15:27 ` [PATCH 001/100] smiapp: Add CCS register definitions and limits Sakari Ailus
2020-09-30 15:27 ` [PATCH 002/100] smiapp: Use CCS register flags Sakari Ailus
2020-09-30 15:27 ` [PATCH 003/100] smiapp: Calculate CCS limit offsets and limit buffer size Sakari Ailus
2020-09-30 15:27 ` [PATCH 004/100] smiapp: Remove macros for defining registers, merge definitions Sakari Ailus
2020-09-30 15:27 ` [PATCH 005/100] smiapp: Add macros for accessing CCS registers Sakari Ailus
2020-09-30 15:27 ` [PATCH 006/100] smiapp: Use MIPI CCS version and manufacturer ID information Sakari Ailus
2020-09-30 15:27 ` [PATCH 007/100] smiapp: Read CCS limit values Sakari Ailus
2020-09-30 15:27 ` [PATCH 008/100] smiapp: Switch to CCS limits Sakari Ailus
2020-09-30 15:27 ` [PATCH 009/100] smiapp: Obtain frame descriptor from " Sakari Ailus
2020-09-30 15:27 ` [PATCH 010/100] smiapp: Use CCS limits in reading data format descriptors Sakari Ailus
2020-09-30 15:27 ` [PATCH 011/100] smiapp: Use CCS limits in reading binning capabilities Sakari Ailus
2020-09-30 15:27 ` [PATCH 012/100] smiapp: Use CCS registers Sakari Ailus
2020-09-30 15:27 ` [PATCH 013/100] smiapp: Remove quirk function for writing a single 8-bit register Sakari Ailus
2020-09-30 15:27 ` [PATCH 014/100] smiapp: Rename register access functions Sakari Ailus
2020-09-30 15:27 ` [PATCH 015/100] smiapp: Internal rename to CCS Sakari Ailus
2020-09-30 15:27 ` [PATCH 016/100] smiapp: Differentiate CCS sensors from SMIA in subdev naming Sakari Ailus
2020-09-30 15:27 ` [PATCH 017/100] smiapp: Rename as "ccs" Sakari Ailus
2020-09-30 15:27 ` [PATCH 018/100] ccs: Remove profile concept Sakari Ailus
2020-09-30 15:27 ` [PATCH 019/100] ccs: Give all subdevs a function Sakari Ailus
2020-09-30 15:27 ` [PATCH 020/100] dt-bindings: Add vendor prefix for MIPI Alliance Sakari Ailus
2020-09-30 15:27 ` [PATCH 021/100] dt-bindings: nokia,smia: Fix link-frequencies documentation Sakari Ailus
2020-09-30 15:27 ` [PATCH 022/100] dt-bindings: nokia,smia: Make vana-supply optional Sakari Ailus
2020-09-30 15:27 ` [PATCH 023/100] dt-bindings: nokia,smia: Convert to YAML Sakari Ailus
2020-09-30 15:27 ` [PATCH 024/100] dt-bindings: nokia,smia: Use better active polarity for reset Sakari Ailus
2020-09-30 15:27 ` [PATCH 025/100] dt-bindings: Amend SMIA bindings with MIPI CCS support Sakari Ailus
2020-09-30 15:27 ` [PATCH 026/100] dt-bindings: Add bus-type for C-PHY support Sakari Ailus
2020-09-30 15:27 ` [PATCH 027/100] ccs: Request for "reset" GPIO Sakari Ailus
2020-09-30 15:27 ` [PATCH 028/100] ccs: Add "mipi,ccs" compatible string Sakari Ailus
2020-09-30 15:27 ` [PATCH 029/100] ccs: Remove the I²C ID table Sakari Ailus
2020-09-30 15:27 ` [PATCH 030/100] ccs: Remove remaining support for platform data Sakari Ailus
2020-09-30 15:27 ` Sakari Ailus [this message]
2020-09-30 15:27 ` [PATCH 032/100] ccs: Add CCS static data parser library Sakari Ailus
2020-09-30 15:27 ` [PATCH 033/100] ccs: Combine revision number major and minor into one Sakari Ailus
2020-09-30 15:27 ` [PATCH 034/100] ccs: Read CCS static data from firmware binaries Sakari Ailus
2020-09-30 15:27 ` [PATCH 035/100] ccs: Stop reading arrays after the first zero Sakari Ailus
2020-09-30 15:27 ` [PATCH 036/100] ccs: The functions to get compose or crop rectangle never return NULL Sakari Ailus
2020-09-30 15:27 ` [PATCH 037/100] ccs: Replace somewhat harsh internal checks based on BUG with WARN_ON Sakari Ailus
2020-09-30 15:27 ` [PATCH 038/100] ccs: Refactor register reading a little Sakari Ailus
2020-09-30 15:27 ` [PATCH 039/100] ccs: Make real to integer number conversion optional Sakari Ailus
2020-09-30 15:27 ` [PATCH 040/100] ccs: Move limit value real to integer conversion from read to access time Sakari Ailus
2020-09-30 15:27 ` [PATCH 041/100] ccs: Read ireal numbers correctly Sakari Ailus
2020-09-30 15:28 ` [PATCH 042/100] smiapp-pll: Rename as ccs-pll Sakari Ailus
2020-09-30 15:28 ` [PATCH 043/100] ccs: Change my e-mail address Sakari Ailus
2020-09-30 15:28 ` [PATCH 044/100] ccs: Add support for manufacturer regs from sensor and module files Sakari Ailus
2020-09-30 15:28 ` [PATCH 045/100] ccs: Use static data read-only registers Sakari Ailus
2020-09-30 15:28 ` [PATCH 046/100] ccs: Clean up runtime PM usage Sakari Ailus
2020-09-30 15:28 ` [PATCH 047/100] ccs: Wrap long lines, unwrap short ones Sakari Ailus
2020-09-30 15:28 ` [PATCH 048/100] ccs: Add device compatible identifiers for telling SMIA and CCS apart Sakari Ailus
2020-09-30 15:28 ` [PATCH 049/100] ccs: Use longer pre-I²C sleep for CCS compliant devices Sakari Ailus
2020-09-30 15:28 ` [PATCH 050/100] ccs-pll: Don't use div_u64 to divide a 32-bit number Sakari Ailus
2020-09-30 15:28 ` [PATCH 051/100] ccs-pll: Split limits and PLL configuration into front and back parts Sakari Ailus
2020-09-30 15:28 ` [PATCH 052/100] ccs-pll: Use correct VT divisor for calculating VT SYS divisor Sakari Ailus
2020-09-30 15:28 ` [PATCH 053/100] ccs-pll: End search if there are no better values available Sakari Ailus
2020-09-30 15:28 ` [PATCH 054/100] ccs-pll: Remove parallel bus support Sakari Ailus
2020-09-30 15:28 ` [PATCH 055/100] ccs-pll: Differentiate between CSI-2 D-PHY and C-PHY Sakari Ailus
2020-09-30 15:28 ` [PATCH 056/100] ccs-pll: Move the flags field down, away from 8-bit fields Sakari Ailus
2020-09-30 15:28 ` [PATCH 057/100] ccs-pll: Document the structs in the header as well as the function Sakari Ailus
2020-09-30 15:28 ` [PATCH 058/100] ccs-pll: Use the BIT macro Sakari Ailus
2020-09-30 15:28 ` [PATCH 059/100] ccs-pll: Begin calculation from OP system clock frequency Sakari Ailus
2020-09-30 15:28 ` [PATCH 060/100] ccs-pll: Fix condition for pre-PLL divider lower bound Sakari Ailus
2020-09-30 15:28 ` [PATCH 061/100] ccs-pll: Avoid overflow in pre-PLL divisor lower bound search Sakari Ailus
2020-09-30 15:28 ` [PATCH 062/100] ccs-pll: Fix comment on check against maximum PLL multiplier Sakari Ailus
2020-09-30 15:28 ` [PATCH 063/100] ccs-pll: Fix check for PLL multiplier upper bound Sakari Ailus
2020-09-30 15:28 ` [PATCH 064/100] ccs-pll: Use explicit 32-bit unsigned type Sakari Ailus
2020-09-30 15:28 ` [PATCH 065/100] ccs-pll: Add support for lane speed model Sakari Ailus
2020-09-30 15:28 ` [PATCH 066/100] ccs: " Sakari Ailus
2020-09-30 15:28 ` [PATCH 067/100] ccs-pll: Add support for decoupled OP domain calculation Sakari Ailus
2020-09-30 15:28 ` [PATCH 068/100] ccs-pll: Add support for extended input PLL clock divider Sakari Ailus
2020-09-30 15:28 ` [PATCH 069/100] ccs-pll: Support two cycles per pixel on OP domain Sakari Ailus
2020-09-30 15:28 ` [PATCH 070/100] ccs-pll: Add support flexible OP PLL pixel clock divider Sakari Ailus
2020-09-30 15:28 ` [PATCH 071/100] ccs-pll: Add sanity checks Sakari Ailus
2020-09-30 15:28 ` [PATCH 072/100] ccs-pll: Add C-PHY support Sakari Ailus
2020-09-30 15:28 ` [PATCH 073/100] ccs-pll: Split off VT subtree calculation Sakari Ailus
2020-09-30 15:28 ` [PATCH 074/100] ccs-pll: Check for derating and overrating, support non-derating sensors Sakari Ailus
2020-09-30 15:28 ` [PATCH 075/100] ccs-pll: Better separate OP and VT sub-tree calculation Sakari Ailus
2020-09-30 15:28 ` [PATCH 076/100] ccs-pll: Print relevant information on PLL tree Sakari Ailus
2020-09-30 15:28 ` [PATCH 077/100] ccs-pll: Rework bounds checks Sakari Ailus
2020-09-30 15:28 ` [PATCH 078/100] ccs-pll: Make VT divisors 16-bit Sakari Ailus
2020-09-30 15:28 ` [PATCH 079/100] ccs-pll: Fix VT post-PLL divisor calculation Sakari Ailus
2020-09-30 15:28 ` [PATCH 080/100] ccs-pll: Separate VT divisor limit calculation from the rest Sakari Ailus
2020-09-30 15:28 ` [PATCH 081/100] ccs-pll: Add trivial dual PLL support Sakari Ailus
2020-09-30 15:28 ` [PATCH 082/100] ccs: Dual " Sakari Ailus
2020-09-30 15:28 ` [PATCH 083/100] ccs-pll: Add support for DDR OP system and pixel clocks Sakari Ailus
2020-09-30 15:28 ` [PATCH 084/100] ccs: Add support for DDR OP SYS and OP PIX clocks Sakari Ailus
2020-09-30 15:28 ` [PATCH 085/100] ccs: Print written register values Sakari Ailus
2020-09-30 15:28 ` [PATCH 086/100] ccs-pll: Print pixel rates Sakari Ailus
2020-09-30 15:28 ` [PATCH 087/100] ccs: Add support for obtaining C-PHY configuration from firmware Sakari Ailus
2020-09-30 15:28 ` [PATCH 088/100] ccs: Add digital gain support Sakari Ailus
2020-09-30 15:28 ` [PATCH 089/100] ccs: Add support for old-style SMIA digital gain Sakari Ailus
2020-09-30 15:28 ` [PATCH 090/100] ccs: Remove analogue gain field Sakari Ailus
2020-09-30 15:28 ` [PATCH 091/100] ccs: Only add analogue gain control if the device supports it Sakari Ailus
2020-09-30 15:28 ` [PATCH 092/100] v4l: Add user control base for CCS controls Sakari Ailus
2020-09-30 15:28 ` [PATCH 093/100] v4l: uapi: Add controls for analogue gain constants Sakari Ailus
2020-09-30 15:28 ` [PATCH 094/100] ccs: Add support for analogue gain coefficient controls Sakari Ailus
2020-09-30 15:28 ` [PATCH 095/100] v4l: uapi: Add controls for CCS alternative analogue gain Sakari Ailus
2020-09-30 15:28 ` [PATCH 096/100] ccs: Add support for alternate analogue global gain Sakari Ailus
2020-09-30 15:28 ` [PATCH 097/100] ccs: Add debug prints for MSR registers Sakari Ailus
2020-09-30 15:28 ` [PATCH 098/100] v4l: uapi: Add CCS controls for correction configuration and capabilities Sakari Ailus
2020-09-30 15:28 ` [PATCH 099/100] ccs: Add shading correction and luminance correction level controls Sakari Ailus
2020-09-30 15:28 ` [PATCH 100/100] smiapp: Add CCS ACPI device ID Sakari Ailus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200930152858.8471-32-sakari.ailus@linux.intel.com \
    --to=sakari.ailus@linux.intel.com \
    --cc=linux-media@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).