All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Klimov <klimov.linux@gmail.com>
To: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
Cc: linux-media@vger.kernel.org, linux-omap@vger.kernel.org,
	saaguirre@ti.com, tuukka.o.toivonen@nokia.com,
	dongsoo.kim@gmail.com
Subject: Re: [PATCH 5/9] omap3isp: Add ISP backend (PRV and RSZ)
Date: Tue, 03 Mar 2009 15:23:55 +0300	[thread overview]
Message-ID: <1236083035.10927.36.camel@tux.localhost> (raw)
In-Reply-To: <1236074816-30018-5-git-send-email-sakari.ailus@maxwell.research.nokia.com>

On Tue, 2009-03-03 at 12:06 +0200, Sakari Ailus wrote:
> Signed-off-by: Sakari Ailus <sakari.ailus@maxwell.research.nokia.com>
> ---
>  drivers/media/video/isp/isppreview.c | 1896 ++++++++++++++++++++++++++++++++++
>  drivers/media/video/isp/isppreview.h |  350 +++++++
>  drivers/media/video/isp/ispresizer.c |  897 ++++++++++++++++
>  drivers/media/video/isp/ispresizer.h |  154 +++
>  4 files changed, 3297 insertions(+), 0 deletions(-)
>  create mode 100644 drivers/media/video/isp/isppreview.c
>  create mode 100644 drivers/media/video/isp/isppreview.h
>  create mode 100644 drivers/media/video/isp/ispresizer.c
>  create mode 100644 drivers/media/video/isp/ispresizer.h
> 
> diff --git a/drivers/media/video/isp/isppreview.c b/drivers/media/video/isp/isppreview.c
> new file mode 100644
> index 0000000..242b578
> --- /dev/null
> +++ b/drivers/media/video/isp/isppreview.c
> @@ -0,0 +1,1896 @@
> +/*
> + * isppreview.c
> + *
> + * Driver Library for Preview module in TI's OMAP3 Camera ISP
> + *
> + * Copyright (C) 2009 Texas Instruments, Inc.
> + *
> + * Contributors:
> + *	Senthilvadivu Guruswamy <svadivu@ti.com>
> + *	Pallavi Kulkarni <p-kulkarni@ti.com>
> + *	Sergio Aguirre <saaguirre@ti.com>
> + *
> + * This package is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + *
> + * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
> + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
> + * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
> + */
> +
> +#include <linux/mutex.h>
> +#include <linux/module.h>
> +#include <linux/uaccess.h>
> +
> +#include "isp.h"
> +#include "ispreg.h"
> +#include "isppreview.h"
> +
> +static struct ispprev_nf prev_nf_t;
> +static struct prev_params *params;
> +static int rg_update, gg_update, bg_update, nf_enable, nf_update;
> +
> +/* Structure for saving/restoring preview module registers */
> +static struct isp_reg ispprev_reg_list[] = {
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_HORZ_INFO, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_VERT_INFO, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RSDR_ADDR, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RADR_OFFSET, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_DSDR_ADDR, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_DRKF_OFFSET, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_WSDR_ADDR, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_WADD_OFFSET, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_AVE, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_HMED, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_NF, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_WB_DGAIN, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_WBGAIN, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_WBSEL, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CFA, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_BLKADJOFF, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT1, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT2, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT3, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT4, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_MAT5, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_OFF1, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_RGB_OFF2, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC0, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC1, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC2, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CSC_OFFSET, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CNT_BRT, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CSUP, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_SETUP_YC, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR0, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR1, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR2, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_CDC_THR3, 0x0000},
> +	{OMAP3_ISP_IOMEM_PREV, ISPPRV_PCR, 0x0000},
> +	{0, ISP_TOK_TERM, 0x0000}
> +};
> +
> +
> +/* Default values in Office Flourescent Light for RGBtoRGB Blending */
> +static struct ispprev_rgbtorgb flr_rgb2rgb = {
> +	{	/* RGB-RGB Matrix */
> +		{0x01E2, 0x0F30, 0x0FEE},
> +		{0x0F9B, 0x01AC, 0x0FB9},
> +		{0x0FE0, 0x0EC0, 0x0260}
> +	},	/* RGB Offset */
> +	{0x0000, 0x0000, 0x0000}
> +};
> +
> +/* Default values in Office Flourescent Light for RGB to YUV Conversion*/
> +static struct ispprev_csc flr_prev_csc[] = {
> +	{
> +		{	/* CSC Coef Matrix */
> +			{66, 129, 25},
> +			{-38, -75, 112},
> +			{112, -94 , -18}
> +		},	/* CSC Offset */
> +		{0x0, 0x0, 0x0}
> +	},
> +	{
> +		{	/* CSC Coef Matrix BW */
> +			{66, 129, 25},
> +			{0, 0, 0},
> +			{0, 0, 0}
> +		},	/* CSC Offset */
> +		{0x0, 0x0, 0x0}
> +	},
> +	{
> +		{	/* CSC Coef Matrix Sepia */
> +			{19, 38, 7},
> +			{0, 0, 0},
> +			{0, 0, 0}
> +		},	/* CSC Offset */
> +		{0x0, 0xE7, 0x14}
> +	}
> +};
> +
> +
> +/* Default values in Office Flourescent Light for CFA Gradient*/
> +#define FLR_CFA_GRADTHRS_HORZ	0x28
> +#define FLR_CFA_GRADTHRS_VERT	0x28
> +
> +/* Default values in Office Flourescent Light for Chroma Suppression*/
> +#define FLR_CSUP_GAIN		0x0D
> +#define FLR_CSUP_THRES		0xEB
> +
> +/* Default values in Office Flourescent Light for Noise Filter*/
> +#define FLR_NF_STRGTH		0x03
> +
> +/* Default values in Office Flourescent Light for White Balance*/
> +#define FLR_WBAL_DGAIN		0x100
> +#define FLR_WBAL_COEF0		0x20
> +#define FLR_WBAL_COEF1		0x29
> +#define FLR_WBAL_COEF2		0x2d
> +#define FLR_WBAL_COEF3		0x20
> +
> +#define FLR_WBAL_COEF0_ES1	0x20
> +#define FLR_WBAL_COEF1_ES1	0x23
> +#define FLR_WBAL_COEF2_ES1	0x39
> +#define FLR_WBAL_COEF3_ES1	0x20
> +
> +/* Default values in Office Flourescent Light for Black Adjustment*/
> +#define FLR_BLKADJ_BLUE		0x0
> +#define FLR_BLKADJ_GREEN	0x0
> +#define FLR_BLKADJ_RED		0x0
> +
> +static int update_color_matrix;
> +
> +/**
> + * struct isp_prev - Structure for storing ISP Preview module information
> + * @prev_inuse: Flag to determine if CCDC has been reserved or not (0 or 1).
> + * @prevout_w: Preview output width.
> + * @prevout_h: Preview output height.
> + * @previn_w: Preview input width.
> + * @previn_h: Preview input height.
> + * @prev_inpfmt: Preview input format.
> + * @prev_outfmt: Preview output format.
> + * @hmed_en: Horizontal median filter enable.
> + * @nf_en: Noise filter enable.
> + * @dcor_en: Defect correction enable.
> + * @cfa_en: Color Filter Array (CFA) interpolation enable.
> + * @csup_en: Chrominance suppression enable.
> + * @yenh_en: Luma enhancement enable.
> + * @fmtavg: Number of horizontal pixels to average in input formatter. The
> + *          input width should be a multiple of this number.
> + * @brightness: Brightness in preview module.
> + * @contrast: Contrast in preview module.
> + * @color: Color effect in preview module.
> + * @cfafmt: Color Filter Array (CFA) Format.
> + * @ispprev_mutex: Mutex for isp preview.
> + *
> + * This structure is used to store the OMAP ISP Preview module Information.
> + */
> +static struct isp_prev {
> +	u8 prev_inuse;
> +	u32 prevout_w;
> +	u32 prevout_h;
> +	u32 previn_w;
> +	u32 previn_h;
> +	enum preview_input prev_inpfmt;
> +	enum preview_output prev_outfmt;
> +	u8 hmed_en;
> +	u8 nf_en;
> +	u8 dcor_en;
> +	u8 cfa_en;
> +	u8 csup_en;
> +	u8 yenh_en;
> +	u8 fmtavg;
> +	u8 brightness;
> +	u8 contrast;
> +	enum v4l2_colorfx color;
> +	enum cfa_fmt cfafmt;
> +	struct mutex ispprev_mutex; /* For checking/modifying prev_inuse */
> +	u32 sph;
> +	u32 slv;
> +} ispprev_obj;
> +
> +/* Saved parameters */
> +static struct prev_params *prev_config_params;
> +
> +/*
> + * Coeficient Tables for the submodules in Preview.
> + * Array is initialised with the values from.the tables text file.
> + */
> +
> +/*
> + * CFA Filter Coefficient Table
> + *
> + */
> +static u32 cfa_coef_table[] = {
> +#include "cfa_coef_table.h"
> +};
> +
> +/*
> + * Gamma Correction Table - Red
> + */
> +static u32 redgamma_table[] = {
> +#include "redgamma_table.h"
> +};
> +
> +/*
> + * Gamma Correction Table - Green
> + */
> +static u32 greengamma_table[] = {
> +#include "greengamma_table.h"
> +};
> +
> +/*
> + * Gamma Correction Table - Blue
> + */
> +static u32 bluegamma_table[] = {
> +#include "bluegamma_table.h"
> +};
> +
> +/*
> + * Noise Filter Threshold table
> + */
> +static u32 noise_filter_table[] = {
> +#include "noise_filter_table.h"
> +};
> +
> +/*
> + * Luminance Enhancement Table
> + */
> +static u32 luma_enhance_table[] = {
> +#include "luma_enhance_table.h"
> +};
> +
> +/**
> + * omap34xx_isp_preview_config - Abstraction layer Preview configuration.
> + * @userspace_add: Pointer from Userspace to structure with flags and data to
> + *                 update.
> + **/
> +int omap34xx_isp_preview_config(void *userspace_add)
> +{
> +	struct ispprev_hmed prev_hmed_t;
> +	struct ispprev_cfa prev_cfa_t;
> +	struct ispprev_csup csup_t;
> +	struct ispprev_wbal prev_wbal_t;
> +	struct ispprev_blkadj prev_blkadj_t;
> +	struct ispprev_rgbtorgb rgb2rgb_t;
> +	struct ispprev_csc prev_csc_t;
> +	struct ispprev_yclimit yclimit_t;
> +	struct ispprev_dcor prev_dcor_t;
> +	struct ispprv_update_config *preview_struct;
> +	struct isptables_update isp_table_update;
> +	int yen_t[ISPPRV_YENH_TBL_SIZE];
> +
> +	if (userspace_add == NULL)
> +		return -EINVAL;
> +
> +	preview_struct = userspace_add;
> +
> +	if (ISP_ABS_PREV_LUMAENH & preview_struct->flag) {
> +		if (ISP_ABS_PREV_LUMAENH & preview_struct->update) {
> +			if (copy_from_user(yen_t, preview_struct->yen,
> +								sizeof(yen_t)))
> +				goto err_copy_from_user;
> +			isppreview_config_luma_enhancement(yen_t);
> +		}
> +		params->features |= PREV_LUMA_ENHANCE;
> +	} else if (ISP_ABS_PREV_LUMAENH & preview_struct->update)
> +			params->features &= ~PREV_LUMA_ENHANCE;
> +
> +	if (ISP_ABS_PREV_INVALAW & preview_struct->flag) {
> +		isppreview_enable_invalaw(1);
> +		params->features |= PREV_INVERSE_ALAW;
> +	} else {
> +		isppreview_enable_invalaw(0);
> +		params->features &= ~PREV_INVERSE_ALAW;
> +	}
> +
> +	if (ISP_ABS_PREV_HRZ_MED & preview_struct->flag) {
> +		if (ISP_ABS_PREV_HRZ_MED & preview_struct->update) {
> +			if (copy_from_user(&prev_hmed_t,
> +						(struct ispprev_hmed *)
> +						preview_struct->prev_hmed,
> +						sizeof(struct ispprev_hmed)))
> +				goto err_copy_from_user;
> +			isppreview_config_hmed(prev_hmed_t);
> +		}
> +		isppreview_enable_hmed(1);
> +		params->features |= PREV_HORZ_MEDIAN_FILTER;
> +	} else if (ISP_ABS_PREV_HRZ_MED & preview_struct->update) {
> +		isppreview_enable_hmed(0);
> +		params->features &= ~PREV_HORZ_MEDIAN_FILTER;
> +	}
> +
> +	if (ISP_ABS_PREV_CFA & preview_struct->flag) {
> +		if (ISP_ABS_PREV_CFA & preview_struct->update) {
> +			if (copy_from_user(&prev_cfa_t,
> +						(struct ispprev_cfa *)
> +						preview_struct->prev_cfa,
> +						sizeof(struct ispprev_cfa)))
> +				goto err_copy_from_user;
> +
> +			isppreview_config_cfa(prev_cfa_t);
> +		}
> +		isppreview_enable_cfa(1);
> +		params->features |= PREV_CFA;
> +	} else if (ISP_ABS_PREV_CFA & preview_struct->update) {
> +		isppreview_enable_cfa(0);
> +		params->features &= ~PREV_CFA;
> +	}
> +
> +	if (ISP_ABS_PREV_CHROMA_SUPP & preview_struct->flag) {
> +		if (ISP_ABS_PREV_CHROMA_SUPP & preview_struct->update) {
> +			if (copy_from_user(&csup_t,
> +						(struct ispprev_csup *)
> +						preview_struct->csup,
> +						sizeof(struct ispprev_csup)))
> +				goto err_copy_from_user;
> +			isppreview_config_chroma_suppression(csup_t);
> +		}
> +		isppreview_enable_chroma_suppression(1);
> +		params->features |= PREV_CHROMA_SUPPRESS;
> +	} else if (ISP_ABS_PREV_CHROMA_SUPP & preview_struct->update) {
> +		isppreview_enable_chroma_suppression(0);
> +		params->features &= ~PREV_CHROMA_SUPPRESS;
> +	}
> +
> +	if (ISP_ABS_PREV_WB & preview_struct->update) {
> +		if (copy_from_user(&prev_wbal_t, (struct ispprev_wbal *)
> +						preview_struct->prev_wbal,
> +						sizeof(struct ispprev_wbal)))
> +			goto err_copy_from_user;
> +		isppreview_config_whitebalance(prev_wbal_t);
> +	}
> +
> +	if (ISP_ABS_PREV_BLKADJ & preview_struct->update) {
> +		if (copy_from_user(&prev_blkadj_t, (struct ispprev_blkadjl *)
> +					preview_struct->prev_blkadj,
> +					sizeof(struct ispprev_blkadj)))
> +			goto err_copy_from_user;
> +		isppreview_config_blkadj(prev_blkadj_t);
> +	}
> +
> +	if (ISP_ABS_PREV_RGB2RGB & preview_struct->update) {
> +		if (copy_from_user(&rgb2rgb_t, (struct ispprev_rgbtorgb *)
> +					preview_struct->rgb2rgb,
> +					sizeof(struct ispprev_rgbtorgb)))
> +			goto err_copy_from_user;
> +		isppreview_config_rgb_blending(rgb2rgb_t);
> +	}
> +
> +	if (ISP_ABS_PREV_COLOR_CONV & preview_struct->update) {
> +		if (copy_from_user(&prev_csc_t, (struct ispprev_csc *)
> +						preview_struct->prev_csc,
> +						sizeof(struct ispprev_csc)))
> +			goto err_copy_from_user;
> +		isppreview_config_rgb_to_ycbcr(prev_csc_t);
> +	}
> +
> +	if (ISP_ABS_PREV_YC_LIMIT & preview_struct->update) {
> +		if (copy_from_user(&yclimit_t, (struct ispprev_yclimit *)
> +					preview_struct->yclimit,
> +					sizeof(struct ispprev_yclimit)))
> +			goto err_copy_from_user;
> +		isppreview_config_yc_range(yclimit_t);
> +	}
> +
> +	if (ISP_ABS_PREV_DEFECT_COR & preview_struct->flag) {
> +		if (ISP_ABS_PREV_DEFECT_COR & preview_struct->update) {
> +			if (copy_from_user(&prev_dcor_t,
> +						(struct ispprev_dcor *)
> +						preview_struct->prev_dcor,
> +						sizeof(struct ispprev_dcor)))
> +				goto err_copy_from_user;
> +			isppreview_config_dcor(prev_dcor_t);
> +		}
> +		isppreview_enable_dcor(1);
> +		params->features |= PREV_DEFECT_COR;
> +	} else if (ISP_ABS_PREV_DEFECT_COR & preview_struct->update) {
> +		isppreview_enable_dcor(0);
> +		params->features &= ~PREV_DEFECT_COR;
> +	}
> +
> +	if (ISP_ABS_PREV_GAMMABYPASS & preview_struct->flag) {
> +		isppreview_enable_gammabypass(1);
> +		params->features |= PREV_GAMMA_BYPASS;
> +	} else {
> +		isppreview_enable_gammabypass(0);
> +		params->features &= ~PREV_GAMMA_BYPASS;
> +	}
> +
> +	isp_table_update.update = preview_struct->update;
> +	isp_table_update.flag = preview_struct->flag;
> +	isp_table_update.prev_nf = preview_struct->prev_nf;
> +	isp_table_update.red_gamma = preview_struct->red_gamma;
> +	isp_table_update.green_gamma = preview_struct->green_gamma;
> +	isp_table_update.blue_gamma = preview_struct->blue_gamma;
> +
> +	if (omap34xx_isp_tables_update(&isp_table_update))
> +		goto err_copy_from_user;
> +
> +	return 0;
> +
> +err_copy_from_user:
> +	printk(KERN_ERR "Preview Config: Copy From User Error");

:) "\n" right ?
And, probably it's not clear from what module this printk come from.
Please, add module name or something here and in others such printks.

<snip>

-- 
Best regards, Klimov Alexey


  parent reply	other threads:[~2009-03-03 12:23 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-03 10:06 [RFC 0/9] OMAP3 ISP and camera drivers Sakari Ailus
2009-03-03 10:06 ` [PATCH 1/9] omap3isp: Add ISP main driver and register definitions Sakari Ailus
2009-03-03 10:06   ` [PATCH 2/9] omap3isp: Add ISP MMU wrapper Sakari Ailus
2009-03-03 10:06     ` [PATCH 3/9] omap3isp: Add userspace header Sakari Ailus
2009-03-03 10:06       ` [PATCH 4/9] omap3isp: Add ISP frontend (CCDC) Sakari Ailus
2009-03-03 10:06         ` [PATCH 5/9] omap3isp: Add ISP backend (PRV and RSZ) Sakari Ailus
2009-03-03 10:06           ` [PATCH 6/9] omap3isp: Add statistics collection modules (H3A and HIST) Sakari Ailus
2009-03-03 10:06             ` [PATCH 7/9] omap3isp: Add CSI2 interface support Sakari Ailus
2009-03-03 10:06               ` [PATCH 8/9] omap3isp: Add ISP tables Sakari Ailus
2009-03-03 10:06                 ` [PATCH 9/9] omap34xxcam: Add camera driver Sakari Ailus
2009-03-03 17:31                   ` Alexey Klimov
2009-03-05 14:09                     ` Sakari Ailus
2009-03-07 14:38                       ` Alexey Klimov
2009-03-03 12:23           ` Alexey Klimov [this message]
2009-03-03 12:07         ` [PATCH 4/9] omap3isp: Add ISP frontend (CCDC) Alexey Klimov
2009-03-06 12:51       ` [PATCH 3/9] omap3isp: Add userspace header Hans Verkuil
2009-03-03 11:56   ` [PATCH 1/9] omap3isp: Add ISP main driver and register definitions Alexey Klimov
2009-03-05 11:34     ` Sakari Ailus
2009-03-07 15:25       ` Alexey Klimov
2009-03-03 13:09 ` [RFC 0/9] OMAP3 ISP and camera drivers Sakari Ailus
2009-03-04 15:28 ` Hiremath, Vaibhav
2009-03-04 15:38   ` Sakari Ailus
2009-03-05  0:10     ` DongSoo(Nathaniel) Kim
2009-03-05  3:53       ` Hiremath, Vaibhav
2009-03-05  4:54         ` DongSoo(Nathaniel) Kim
2009-03-05  4:54           ` DongSoo(Nathaniel) Kim
2009-03-05  7:30         ` Sakari Ailus
2009-03-05 14:26         ` [PATCH] omap34xxcam: Don't use dev_err before we have a video device Sakari Ailus
2009-03-05  5:00 ` [RFC 0/9] OMAP3 ISP and camera drivers DongSoo(Nathaniel) Kim
2009-03-05  5:00   ` DongSoo(Nathaniel) Kim

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=1236083035.10927.36.camel@tux.localhost \
    --to=klimov.linux@gmail.com \
    --cc=dongsoo.kim@gmail.com \
    --cc=linux-media@vger.kernel.org \
    --cc=linux-omap@vger.kernel.org \
    --cc=saaguirre@ti.com \
    --cc=sakari.ailus@maxwell.research.nokia.com \
    --cc=tuukka.o.toivonen@nokia.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.