90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 8601f1fc0a9a22788bfa6369fbbf83b3828a5b42 Mon Sep 17 00:00:00 2001
 | |
| From: Eugen Hristev <eugen.hristev@microchip.com>
 | |
| Date: Tue, 13 Apr 2021 12:57:23 +0200
 | |
| Subject: [PATCH 181/247] media: atmel: atmel-isc: create an adapt pipeline
 | |
|  callback for product specific
 | |
| 
 | |
| Once the pipeline is set in the base code, create a callback that will adapt
 | |
| the ISC pipeline to each product.
 | |
| Create the adapt_pipeline callback that will be used in this fashion.
 | |
| 
 | |
| [hverkuil: made isc_sama5d2_adapt_pipeline static]
 | |
| 
 | |
| Signed-off-by: Eugen Hristev <eugen.hristev@microchip.com>
 | |
| Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
 | |
| Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org>
 | |
| ---
 | |
|  drivers/media/platform/atmel/atmel-isc-base.c    |  4 ++++
 | |
|  drivers/media/platform/atmel/atmel-isc.h         |  5 +++++
 | |
|  drivers/media/platform/atmel/atmel-sama5d2-isc.c | 11 +++++++++++
 | |
|  3 files changed, 20 insertions(+)
 | |
| 
 | |
| --- a/drivers/media/platform/atmel/atmel-isc-base.c
 | |
| +++ b/drivers/media/platform/atmel/atmel-isc-base.c
 | |
| @@ -1059,6 +1059,10 @@ static int isc_try_configure_pipeline(st
 | |
|  	default:
 | |
|  		isc->try_config.bits_pipeline = 0x0;
 | |
|  	}
 | |
| +
 | |
| +	/* Tune the pipeline to product specific */
 | |
| +	isc->adapt_pipeline(isc);
 | |
| +
 | |
|  	return 0;
 | |
|  }
 | |
|  
 | |
| --- a/drivers/media/platform/atmel/atmel-isc.h
 | |
| +++ b/drivers/media/platform/atmel/atmel-isc.h
 | |
| @@ -235,6 +235,9 @@ struct isc_reg_offsets {
 | |
|   * @config_ctrls:	pointer to a functoin that initializes product
 | |
|   *			specific v4l2 controls.
 | |
|   *
 | |
| + * @adapt_pipeline:	pointer to a function that adapts the pipeline bits
 | |
| + *			to the product specific pipeline
 | |
| + *
 | |
|   * @offsets:		struct holding the product specific register offsets
 | |
|   * @controller_formats:	pointer to the array of possible formats that the
 | |
|   *			controller can output
 | |
| @@ -320,6 +323,8 @@ struct isc_device {
 | |
|  
 | |
|  		void (*config_ctrls)(struct isc_device *isc,
 | |
|  				     const struct v4l2_ctrl_ops *ops);
 | |
| +
 | |
| +		void (*adapt_pipeline)(struct isc_device *isc);
 | |
|  	};
 | |
|  
 | |
|  	struct isc_reg_offsets		offsets;
 | |
| --- a/drivers/media/platform/atmel/atmel-sama5d2-isc.c
 | |
| +++ b/drivers/media/platform/atmel/atmel-sama5d2-isc.c
 | |
| @@ -54,6 +54,10 @@
 | |
|  
 | |
|  #define ISC_CLK_MAX_DIV		255
 | |
|  
 | |
| +#define ISC_SAMA5D2_PIPELINE \
 | |
| +	(WB_ENABLE | CFA_ENABLE | CC_ENABLE | GAM_ENABLES | CSC_ENABLE | \
 | |
| +	CBC_ENABLE | SUB422_ENABLE | SUB420_ENABLE)
 | |
| +
 | |
|  /* This is a list of the formats that the ISC can *output* */
 | |
|  static const struct isc_format sama5d2_controller_formats[] = {
 | |
|  	{
 | |
| @@ -257,6 +261,11 @@ static void isc_sama5d2_config_rlp(struc
 | |
|  			   ISC_RLP_CFG_MODE_MASK, rlp_mode);
 | |
|  }
 | |
|  
 | |
| +static void isc_sama5d2_adapt_pipeline(struct isc_device *isc)
 | |
| +{
 | |
| +	isc->try_config.bits_pipeline &= ISC_SAMA5D2_PIPELINE;
 | |
| +}
 | |
| +
 | |
|  /* Gamma table with gamma 1/2.2 */
 | |
|  static const u32 isc_sama5d2_gamma_table[][GAMMA_ENTRIES] = {
 | |
|  	/* 0 --> gamma 1/1.8 */
 | |
| @@ -431,6 +440,8 @@ static int atmel_isc_probe(struct platfo
 | |
|  	isc->config_rlp = isc_sama5d2_config_rlp;
 | |
|  	isc->config_ctrls = isc_sama5d2_config_ctrls;
 | |
|  
 | |
| +	isc->adapt_pipeline = isc_sama5d2_adapt_pipeline;
 | |
| +
 | |
|  	isc->offsets.csc = ISC_SAMA5D2_CSC_OFFSET;
 | |
|  	isc->offsets.cbc = ISC_SAMA5D2_CBC_OFFSET;
 | |
|  	isc->offsets.sub422 = ISC_SAMA5D2_SUB422_OFFSET;
 | 
