From: Sakari Ailus <sakari.ailus@linux.intel.com>
To: Maurizio Casciano <mauriziocasciano7@gmail.com>
Cc: linux-media@vger.kernel.org,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Bingbu Cao" <bingbu.cao@amd.com>,
"Jacopo Mondi" <jacopo.mondi@ideasonboard.com>,
"Nicholas Roth" <nicholas@rothemail.net>,
"Andy Shevchenko" <andy@kernel.org>,
"Andy Shevchenko" <andriy.shevchenko@intel.com>,
"Hans de Goede" <hansg@kernel.org>,
"Greg Kroah-Hartman" <gregkh@linuxfoundation.org>,
"Jose Maria Martin" <jmmartinf@hotmail.com>,
"Uwe Kleine-König" <ukleinek@kernel.org>,
linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 08/11] media: atomisp: support the Yoga Book OV2740 link
Date: Fri, 28 Aug 2026 14:37:37 +0300 [thread overview]
Message-ID: <apFzAc5XfV9gQpXS@kekkonen.localdomain> (raw)
In-Reply-To: <20260827181756.2430054-9-mauriziocasciano7@gmail.com>
Hi Maurizio,
On Thu, Aug 27, 2026 at 08:17:53PM +0200, Maurizio Casciano wrote:
> The YB1-X91L firmware does not describe the complete camera link. Its
> front OV2740 uses two CSI-2 lanes at a 288 MHz link frequency and sends
> a 1932x1092 BGGR transport frame with 12 pixels of horizontal and
> vertical padding around the 1920x1080 image.
>
> Allow the AtomISP bridge to provide per-sensor link frequencies and
> padding, add the matching OV2740 mode, and derive ISP2401 D-PHY timing
> from the sensor link-frequency control.
>
> The register values are hardware configuration facts checked against
> the Lenovo YB1-X91L configuration and physical captures; no proprietary
> driver code or tuning binary is included.
>
> Tested on a Lenovo Yoga Book YB1-X91L with continuous front-camera raw
> capture.
>
> Signed-off-by: Maurizio Casciano <mauriziocasciano7@gmail.com>
> Assisted-by: Codex:gpt-5.6-sol sparse
> ---
> drivers/media/i2c/ov2740.c | 103 +++++++++++++++++-
> drivers/media/pci/intel/ipu-bridge.c | 15 ++-
> .../staging/media/atomisp/pci/atomisp_csi2.c | 17 ++-
> .../staging/media/atomisp/pci/atomisp_csi2.h | 2 +
> .../media/atomisp/pci/atomisp_csi2_bridge.c | 53 ++++++++-
> include/media/ipu-bridge.h | 2 +
> 6 files changed, 173 insertions(+), 19 deletions(-)
Please split this into three (at least):
- ov2740
- IPU bridge
- atomisp
- atomisp bridge
>
> diff --git a/drivers/media/i2c/ov2740.c b/drivers/media/i2c/ov2740.c
> index 18bb3ac9701f..6083dd28e4ad 100644
> --- a/drivers/media/i2c/ov2740.c
> +++ b/drivers/media/i2c/ov2740.c
> @@ -12,12 +12,14 @@
> #include <linux/regmap.h>
> #include <linux/regulator/consumer.h>
> #include <linux/unaligned.h>
> +#include <linux/units.h>
> #include <media/v4l2-ctrls.h>
> #include <media/v4l2-device.h>
> #include <media/v4l2-fwnode.h>
>
> -#define OV2740_LINK_FREQ_360MHZ 360000000ULL
> -#define OV2740_LINK_FREQ_180MHZ 180000000ULL
> +#define OV2740_LINK_FREQ_360MHZ (360ULL * HZ_PER_MHZ)
> +#define OV2740_LINK_FREQ_288MHZ (288ULL * HZ_PER_MHZ)
> +#define OV2740_LINK_FREQ_180MHZ (180ULL * HZ_PER_MHZ)
> #define OV2740_SCLK 72000000LL
> #define OV2740_MCLK 19200000
(19.2 * HZ_PER_MHZ)
?
> #define OV2740_DATA_LANES 2
> @@ -91,6 +93,7 @@ struct nvm_data {
>
> enum {
> OV2740_LINK_FREQ_360MHZ_INDEX,
> + OV2740_LINK_FREQ_288MHZ_INDEX,
> OV2740_LINK_FREQ_180MHZ_INDEX,
> };
>
> @@ -130,6 +133,12 @@ struct ov2740_mode {
> /* Link frequency needed for this resolution */
> u32 link_freq_index;
>
> + /* Bayer order produced by this mode */
> + u32 code;
> +
> + /* Optional common settings applied before the mode-specific settings */
> + const struct ov2740_reg_list init_reg_list;
> +
> /* Sensor register settings for this resolution */
> const struct ov2740_reg_list reg_list;
> };
> @@ -142,6 +151,14 @@ static const struct ov2740_reg mipi_data_rate_720mbps[] = {
> {0x0312, 0x11},
> };
>
> +static const struct ov2740_reg mipi_data_rate_576mbps[] = {
> + {0x0302, 0x1e},
> + {0x0303, 0x00},
> + {0x030d, 0x1e},
> + {0x030e, 0x02},
> + {0x0312, 0x01},
> +};
> +
> static const struct ov2740_reg mipi_data_rate_360mbps[] = {
> {0x0302, 0x4b},
> {0x0303, 0x01},
> @@ -458,6 +475,36 @@ static const struct ov2740_reg mode_1932x1092_regs_180mhz[] = {
> {0x4003, 0x40}, /* set Black level to 0x40 */
> };
>
> +/*
> + * Lenovo's Yoga Book vendor driver uses the generic initialization settings
> + * above followed by these mode overrides. Unlike the generic 720 Mbps mode,
> + * this is a 576 Mbps two-lane mode with BGGR output from the optical array.
> + */
> +static const struct ov2740_reg mode_1932x1092_regs_288mhz[] = {
> + {0x0302, 0x1e},
> + {0x0303, 0x00},
> + {0x030d, 0x1e},
> + {0x030e, 0x02},
> + {0x0312, 0x01},
> + {0x3808, 0x07},
> + {0x3809, 0x8c},
> + {0x380a, 0x04},
> + {0x380b, 0x44},
> + {0x380c, 0x04},
> + {0x380d, 0x38},
> + {0x380e, 0x06},
> + {0x380f, 0xf0},
> + {0x3810, 0x00},
> + {0x3811, 0x02},
> + {0x3812, 0x00},
> + {0x3813, 0x02},
> + {0x481f, 0x29},
> + {0x4820, 0x01},
> + {0x4837, 0x1b},
> + {0x5000, 0x7f},
> + {0x58f4, 0x32},
> +};
> +
> static const char * const ov2740_test_pattern_menu[] = {
> "Disabled",
> "Color Bar",
> @@ -468,6 +515,7 @@ static const char * const ov2740_test_pattern_menu[] = {
>
> static const s64 link_freq_menu_items[] = {
> OV2740_LINK_FREQ_360MHZ,
> + OV2740_LINK_FREQ_288MHZ,
> OV2740_LINK_FREQ_180MHZ,
> };
>
> @@ -478,6 +526,12 @@ static const struct ov2740_link_freq_config link_freq_configs[] = {
> .regs = mipi_data_rate_720mbps,
> }
> },
> + [OV2740_LINK_FREQ_288MHZ_INDEX] = {
> + .reg_list = {
> + .num_of_regs = ARRAY_SIZE(mipi_data_rate_576mbps),
> + .regs = mipi_data_rate_576mbps,
> + }
> + },
> [OV2740_LINK_FREQ_180MHZ_INDEX] = {
> .reg_list = {
> .num_of_regs = ARRAY_SIZE(mipi_data_rate_360mbps),
> @@ -499,6 +553,28 @@ static const struct ov2740_mode supported_modes_360mhz[] = {
> .regs = mode_1932x1092_regs_360mhz,
> },
> .link_freq_index = OV2740_LINK_FREQ_360MHZ_INDEX,
> + .code = MEDIA_BUS_FMT_SGRBG10_1X10,
> + },
> +};
> +
> +static const struct ov2740_mode supported_modes_288mhz[] = {
> + {
> + .width = 1932,
> + .height = 1092,
> + .hts = 2160,
> + .vts_min = 1776,
> + .vts_def = 1776,
> + .vts_max = 32767,
> + .init_reg_list = {
> + .num_of_regs = ARRAY_SIZE(mode_1932x1092_regs_360mhz),
> + .regs = mode_1932x1092_regs_360mhz,
> + },
> + .reg_list = {
> + .num_of_regs = ARRAY_SIZE(mode_1932x1092_regs_288mhz),
> + .regs = mode_1932x1092_regs_288mhz,
> + },
> + .link_freq_index = OV2740_LINK_FREQ_288MHZ_INDEX,
> + .code = MEDIA_BUS_FMT_SBGGR10_1X10,
Why is the mbus code different for this mode? Even the size is the same!
Could you use the same cropping and just a different PLL configuration?
> },
> };
>
> @@ -515,6 +591,7 @@ static const struct ov2740_mode supported_modes_180mhz[] = {
> .regs = mode_1932x1092_regs_180mhz,
> },
> .link_freq_index = OV2740_LINK_FREQ_180MHZ_INDEX,
> + .code = MEDIA_BUS_FMT_SGRBG10_1X10,
> },
> };
>
> @@ -842,7 +919,7 @@ static void ov2740_update_pad_format(const struct ov2740_mode *mode,
> {
> fmt->width = mode->width;
> fmt->height = mode->height;
> - fmt->code = MEDIA_BUS_FMT_SGRBG10_1X10;
> + fmt->code = mode->code;
> fmt->field = V4L2_FIELD_NONE;
> }
>
> @@ -966,6 +1043,15 @@ static int ov2740_start_streaming(struct ov2740 *ov2740)
> return ret;
> }
>
> + if (ov2740->cur_mode->init_reg_list.num_of_regs) {
> + reg_list = &ov2740->cur_mode->init_reg_list;
> + ret = ov2740_write_reg_list(ov2740, reg_list);
No need to do this conditionally, and also the reg_list variable is
redundant.
> + if (ret) {
> + dev_err(ov2740->dev, "failed to set common mode registers\n");
> + return ret;
> + }
> + }
> +
> reg_list = &ov2740->cur_mode->reg_list;
> ret = ov2740_write_reg_list(ov2740, reg_list);
> if (ret) {
> @@ -1062,10 +1148,12 @@ static int ov2740_enum_mbus_code(struct v4l2_subdev *sd,
> struct v4l2_subdev_state *sd_state,
> struct v4l2_subdev_mbus_code_enum *code)
> {
> + struct ov2740 *ov2740 = to_ov2740(sd);
> +
> if (code->index > 0)
> return -EINVAL;
>
> - code->code = MEDIA_BUS_FMT_SGRBG10_1X10;
> + code->code = ov2740->supported_modes[0].code;
>
> return 0;
> }
> @@ -1080,7 +1168,7 @@ static int ov2740_enum_frame_size(struct v4l2_subdev *sd,
> if (fse->index >= ov2740->supported_modes_count)
> return -EINVAL;
>
> - if (fse->code != MEDIA_BUS_FMT_SGRBG10_1X10)
> + if (fse->code != supported_modes[0].code)
> return -EINVAL;
>
> fse->min_width = supported_modes[fse->index].width;
> @@ -1178,6 +1266,11 @@ static int ov2740_check_hwcfg(struct ov2740 *ov2740)
> ov2740->supported_modes_count =
> ARRAY_SIZE(supported_modes_360mhz);
> break;
> + case OV2740_LINK_FREQ_288MHZ_INDEX:
> + ov2740->supported_modes = supported_modes_288mhz;
> + ov2740->supported_modes_count =
> + ARRAY_SIZE(supported_modes_288mhz);
> + break;
> case OV2740_LINK_FREQ_180MHZ_INDEX:
> ov2740->supported_modes = supported_modes_180mhz;
> ov2740->supported_modes_count =
> diff --git a/drivers/media/pci/intel/ipu-bridge.c b/drivers/media/pci/intel/ipu-bridge.c
> index 47317c423fad..5730a95767a2 100644
> --- a/drivers/media/pci/intel/ipu-bridge.c
> +++ b/drivers/media/pci/intel/ipu-bridge.c
> @@ -520,11 +520,16 @@ static void ipu_bridge_create_fwnode_properties(
> sensor->prop_names.remote_endpoint,
> sensor->local_ref);
>
> - if (cfg->nr_link_freqs > 0)
> - sensor->ep_properties[3] = PROPERTY_ENTRY_U64_ARRAY_LEN(
> - sensor->prop_names.link_frequencies,
> - cfg->link_freqs,
> - cfg->nr_link_freqs);
> + if (sensor->nr_link_freqs > 0)
> + sensor->ep_properties[3] =
> + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies,
> + sensor->link_freqs,
> + sensor->nr_link_freqs);
> + else if (cfg->nr_link_freqs > 0)
> + sensor->ep_properties[3] =
> + PROPERTY_ENTRY_U64_ARRAY_LEN(names->link_frequencies,
> + cfg->link_freqs,
> + cfg->nr_link_freqs);
>
> sensor->ipu_properties[0] = PROPERTY_ENTRY_U32_ARRAY_LEN(
> sensor->prop_names.data_lanes,
> diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2.c b/drivers/staging/media/atomisp/pci/atomisp_csi2.c
> index 95b9113d75e9..035f1addeaae 100644
> --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.c
> +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.c
> @@ -5,6 +5,7 @@
> * Copyright (c) 2010 Intel Corporation. All Rights Reserved.
> */
>
> +#include <media/v4l2-common.h>
> #include <media/v4l2-event.h>
> #include <media/v4l2-mediabus.h>
> #include "atomisp_cmd.h"
> @@ -288,18 +289,19 @@ static void atomisp_csi2_configure_isp2401(struct atomisp_sub_device *asd)
> int dat_termen;
> int dat_settle;
>
> - struct v4l2_control ctrl;
> struct atomisp_device *isp = asd->isp;
> + struct v4l2_subdev *sensor;
> + s64 link_freq;
> int mipi_freq = 0;
> enum atomisp_camera_port port;
> int n;
>
> port = isp->inputs[asd->input_curr].port;
>
> - ctrl.id = V4L2_CID_LINK_FREQ;
> - if (v4l2_g_ctrl
> - (isp->inputs[asd->input_curr].sensor->ctrl_handler, &ctrl) == 0)
> - mipi_freq = ctrl.value;
> + sensor = isp->inputs[asd->input_curr].sensor;
> + link_freq = v4l2_get_link_freq(&sensor->entity.pads[0], 0, 0);
> + if (link_freq > 0 && link_freq <= S32_MAX)
Why S32_MAX? Presumably more is too much, but that shouldn't happen anyway.
> + mipi_freq = link_freq;
>
> clk_termen = atomisp_csi2_configure_calc(coeff_clk_termen, mipi_freq,
> TERMEN_DEFAULT);
> @@ -310,6 +312,11 @@ static void atomisp_csi2_configure_isp2401(struct atomisp_sub_device *asd)
> dat_settle = atomisp_csi2_configure_calc(coeff_dat_settle, mipi_freq,
> SETTLE_DEFAULT);
>
> + dev_dbg(isp->dev,
> + "CSI port %u link frequency %d Hz, clk timing %d/%d, data timing %d/%d\n",
> + port, mipi_freq, clk_termen, clk_settle,
> + dat_termen, dat_settle);
> +
> for (n = 0; n < csi2_port_lanes[port] + 1; n++) {
> hrt_address base = csi2_port_base[port] + csi2_lane_base[n];
>
> diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2.h b/drivers/staging/media/atomisp/pci/atomisp_csi2.h
> index ec762f8fb922..9298c31bf11e 100644
> --- a/drivers/staging/media/atomisp/pci/atomisp_csi2.h
> +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2.h
> @@ -45,6 +45,8 @@ int atomisp_mipi_csi2_register_entities(struct atomisp_mipi_csi2_device *csi2,
> struct v4l2_device *vdev);
> int atomisp_csi2_bridge_init(struct atomisp_device *isp);
> int atomisp_csi2_bridge_parse_firmware(struct atomisp_device *isp);
> +bool atomisp_csi2_get_sensor_padding(struct device *dev,
> + struct v4l2_area *padding);
>
> void atomisp_csi2_configure(struct atomisp_sub_device *asd);
>
> diff --git a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
> index 207ab69385b5..502c951cb687 100644
> --- a/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
> +++ b/drivers/staging/media/atomisp/pci/atomisp_csi2_bridge.c
> @@ -15,6 +15,7 @@
> #include <linux/dmi.h>
> #include <linux/platform_data/x86/int3472.h>
> #include <linux/property.h>
> +#include <linux/units.h>
>
> #include <media/ipu-bridge.h>
> #include <media/v4l2-fwnode.h>
> @@ -43,14 +44,16 @@ static const guid_t vcm_dsm_guid =
> 0x9f, 0x48, 0xa9, 0xc3, 0xb5, 0xda, 0x78, 0x9f);
>
> struct atomisp_sensor_config {
> + u64 link_freq;
> int lanes;
> bool vcm;
> };
>
> -#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM) \
> +#define ATOMISP_SENSOR_CONFIG(_HID, _LANES, _VCM, _LINK_FREQ) \
> { \
> .id = _HID, \
> .driver_data = (long)&((const struct atomisp_sensor_config) { \
> + .link_freq = _LINK_FREQ, \
> .lanes = _LANES, \
> .vcm = _VCM, \
> }) \
> @@ -77,6 +80,9 @@ static struct gmin_cfg_var lenovo_ideapad_miix_310_vars[] = {
> static struct gmin_cfg_var lenovo_yogabook_x91_vars[] = {
> /* The vendor driver and sensor modes use two CSI data lanes. */
> { "OVTI2740:00", "CsiLanes", "2" },
> + /* Crop the vendor mode's 1932x1092 transport frame to 1920x1080. */
> + { "OVTI2740:00", "CsiPaddingWidth", "12" },
> + { "OVTI2740:00", "CsiPaddingHeight", "12" },
> {}
> };
>
> @@ -207,6 +213,40 @@ static int gmin_cfg_get_int(struct acpi_device *adev, const char *key, int defau
> return default_val;
> }
>
> +static u32 atomisp_csi2_get_padding_value(struct acpi_device *adev,
> + const char *key, u32 default_val)
> +{
> + int val;
> +
> + val = gmin_cfg_get_int(adev, key, default_val);
> + if (val >= 0 && val <= 64 && !(val & 1))
> + return val;
> +
> + acpi_handle_warn(adev->handle, "%s: Invalid %s=%d\n",
> + dev_name(&adev->dev), key, val);
> + return default_val;
> +}
> +
> +bool atomisp_csi2_get_sensor_padding(struct device *dev,
> + struct v4l2_area *padding)
> +{
> + struct acpi_device *adev;
> +
> + padding->width = pad_w;
> + padding->height = pad_h;
> +
> + adev = ACPI_COMPANION(dev);
> + if (!adev)
> + return false;
> +
> + padding->width = atomisp_csi2_get_padding_value(adev,
> + "CsiPaddingWidth", pad_w);
> + padding->height = atomisp_csi2_get_padding_value(adev,
> + "CsiPaddingHeight", pad_h);
> +
> + return padding->width != pad_w || padding->height != pad_h;
> +}
> +
> static int atomisp_csi2_get_pmc_clk_nr_from_acpi_pr0(struct acpi_device *adev)
> {
> /* ACPI_PATH_SEGMENT_LENGTH is guaranteed to be big enough for name + 0 term. */
> @@ -373,9 +413,10 @@ static const struct acpi_device_id atomisp_sensor_configs[] = {
> * the sensor fails to start streaming when instantiating
> * an i2c-client for the VCM, so it is disabled for now.
> */
> - ATOMISP_SENSOR_CONFIG("INT33BE", 2, false), /* OV5693 */
> - ATOMISP_SENSOR_CONFIG("INT3477", 4, true), /* OV8858 */
> - ATOMISP_SENSOR_CONFIG("OVTI2740", 2, false), /* OV2740 */
Please only add the OVTI2740 line once the frequency can be assigned.
> + ATOMISP_SENSOR_CONFIG("INT33BE", 2, false, 0), /* OV5693 */
> + ATOMISP_SENSOR_CONFIG("INT3477", 4, true, 0), /* OV8858 */
> + /* OV2740 */
> + ATOMISP_SENSOR_CONFIG("OVTI2740", 2, false, 288 * HZ_PER_MHZ),
> {}
> };
>
> @@ -394,6 +435,10 @@ static int atomisp_csi2_parse_sensor_fwnode(struct acpi_device *adev,
>
> lanes = cfg->lanes;
> vcm = cfg->vcm;
> + if (cfg->link_freq) {
> + sensor->link_freqs[0] = cfg->link_freq;
> + sensor->nr_link_freqs = 1;
> + }
> }
>
> /*
> diff --git a/include/media/ipu-bridge.h b/include/media/ipu-bridge.h
> index 16fac765456e..633ef0c4cf59 100644
> --- a/include/media/ipu-bridge.h
> +++ b/include/media/ipu-bridge.h
> @@ -135,6 +135,8 @@ struct ipu_sensor {
>
> u8 link;
> u8 lanes;
> + u8 nr_link_freqs;
> + u64 link_freqs[MAX_NUM_LINK_FREQS];
> u32 mclkspeed;
> u32 rotation;
> enum v4l2_fwnode_orientation orientation;
--
Regards,
Sakari Ailus
next prev parent reply other threads:[~2026-08-28 11:37 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-26 13:22 [PATCH 0/8] media: Add Lenovo Yoga Book YB1-X91 camera support Maurizio Casciano
2026-08-26 13:22 ` [PATCH 1/8] media: ov8858: support 19.2 MHz clock and CHT gain setup Maurizio Casciano
2026-08-27 9:40 ` Andy Shevchenko
2026-08-27 11:59 ` Sakari Ailus
2026-08-27 18:19 ` Maurizio Casciano
2026-08-26 13:22 ` [PATCH 2/8] media: i2c: Add Yoga Book camera ACPI IDs Maurizio Casciano
2026-08-27 9:58 ` Andy Shevchenko
2026-08-27 12:14 ` Sakari Ailus
2026-08-27 12:46 ` Andy Shevchenko
2026-08-27 18:19 ` Maurizio Casciano
2026-08-27 23:18 ` Maurizio Casciano
2026-08-27 12:13 ` Sakari Ailus
2026-08-26 13:22 ` [PATCH 3/8] media: intel: ipu-bridge: Add Yoga Book camera sensors Maurizio Casciano
2026-08-26 13:22 ` [PATCH 4/8] media: atomisp: Add Yoga Book camera configuration Maurizio Casciano
2026-08-26 13:22 ` [PATCH 5/8] media: atomisp: support the Yoga Book OV2740 link Maurizio Casciano
2026-08-27 14:26 ` Andy Shevchenko
2026-08-27 23:18 ` Maurizio Casciano
2026-08-26 13:22 ` [PATCH 6/8] media: ov2740: add manual white balance controls Maurizio Casciano
2026-08-27 3:13 ` Cao, Bingbu
2026-08-27 18:19 ` Maurizio Casciano
2026-08-27 14:32 ` Andy Shevchenko
2026-08-26 13:22 ` [PATCH 7/8] media: atomisp: allow opt-in raw Bayer capture Maurizio Casciano
2026-08-27 14:43 ` Andy Shevchenko
2026-08-26 13:22 ` [PATCH 8/8] media: i2c: Add WV517S lens actuator driver Maurizio Casciano
2026-08-27 12:30 ` Sakari Ailus
2026-08-27 18:19 ` Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 00/11] media: Add Lenovo Yoga Book YB1-X91 camera support Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 01/11] media: ov8858: Extract digital gain programming Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 02/11] media: ov8858: support 19.2 MHz clock and CHT gain setup Maurizio Casciano
2026-08-27 19:46 ` Andy Shevchenko
2026-08-27 23:18 ` Maurizio Casciano
2026-08-28 7:28 ` Sakari Ailus
2026-08-28 7:48 ` Andy Shevchenko
2026-08-27 18:17 ` [PATCH v2 03/11] media: ov2740: Use C99 initializers for ACPI IDs Maurizio Casciano
2026-08-27 19:47 ` Andy Shevchenko
2026-08-27 18:17 ` [PATCH v2 04/11] media: ov2740: Add OVTI2740 ACPI ID Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 05/11] media: ov8858: Add INT3477 " Maurizio Casciano
2026-08-28 11:21 ` Sakari Ailus
2026-08-28 13:24 ` Andy Shevchenko
2026-08-28 13:31 ` Andy Shevchenko
2026-08-27 18:17 ` [PATCH v2 06/11] media: intel: ipu-bridge: Add Yoga Book camera sensors Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 07/11] media: atomisp: Add Yoga Book camera configuration Maurizio Casciano
2026-08-27 18:17 ` [PATCH v2 08/11] media: atomisp: support the Yoga Book OV2740 link Maurizio Casciano
2026-08-27 19:57 ` Andy Shevchenko
2026-08-28 11:37 ` Sakari Ailus [this message]
2026-08-28 11:42 ` Sakari Ailus
2026-08-27 18:17 ` [PATCH v2 09/11] media: ov2740: add manual white balance controls Maurizio Casciano
2026-08-27 20:03 ` Andy Shevchenko
2026-08-27 18:17 ` [PATCH v2 10/11] media: atomisp: allow raw Bayer capture Maurizio Casciano
2026-08-27 20:24 ` Andy Shevchenko
2026-08-27 18:17 ` [PATCH v2 11/11] media: i2c: Add WV517S lens actuator driver Maurizio Casciano
2026-08-27 20:31 ` Andy Shevchenko
2026-08-27 18:58 ` [PATCH v2 00/11] media: Add Lenovo Yoga Book YB1-X91 camera support Andy Shevchenko
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=apFzAc5XfV9gQpXS@kekkonen.localdomain \
--to=sakari.ailus@linux.intel.com \
--cc=andriy.shevchenko@intel.com \
--cc=andy@kernel.org \
--cc=bingbu.cao@amd.com \
--cc=gregkh@linuxfoundation.org \
--cc=hansg@kernel.org \
--cc=jacopo.mondi@ideasonboard.com \
--cc=jmmartinf@hotmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-staging@lists.linux.dev \
--cc=mauriziocasciano7@gmail.com \
--cc=mchehab@kernel.org \
--cc=nicholas@rothemail.net \
--cc=ukleinek@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