136 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			136 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From dfcc0395f5e838c0b5c3fb93c9335b6a8892178a Mon Sep 17 00:00:00 2001
 | |
| From: Eugen Hristev <eugen.hristev@microchip.com>
 | |
| Date: Mon, 5 Jul 2021 14:57:08 +0200
 | |
| Subject: [PATCH 190/247] media: atmel: fix build when ISC=m and XISC=y
 | |
| 
 | |
| Building VIDEO_ATMEL_ISC as module and VIDEO_ATMEL_XISC as built-in
 | |
| (or viceversa) causes build errors:
 | |
| 
 | |
|  or1k-linux-ld: drivers/media/platform/atmel/atmel-isc-base.o: in function `isc_async_complete':
 | |
|  atmel-isc-base.c:(.text+0x40d0): undefined reference to `__this_module'
 | |
|  or1k-linux-ld: atmel-isc-base.c:(.text+0x40f0): undefined reference to `__this_module'
 | |
|  or1k-linux-ld: drivers/media/platform/atmel/atmel-isc-base.o:(.rodata+0x390): undefined reference to `__this_module'
 | |
|  or1k-linux-ld: drivers/media/platform/atmel/atmel-isc-base.o:(__param+0x4): undefined reference to `__this_module'
 | |
|  or1k-linux-ld: drivers/media/platform/atmel/atmel-isc-base.o:(__param+0x18): undefined reference to `__this_module'
 | |
| 
 | |
| This is caused by the file atmel-isc-base.c which is common code between
 | |
| the two drivers.
 | |
| 
 | |
| The solution is to create another Kconfig symbol that is automatically
 | |
| selected and generates the module atmel-isc-base.ko. This module can be
 | |
| loaded when both drivers are modules, or built-in when at least one of them
 | |
| is built-in.
 | |
| 
 | |
| Reported-by: kernel test robot <lkp@intel.com>
 | |
| Fixes: c9aa973884a1 ("media: atmel: atmel-isc: add microchip-xisc driver")
 | |
| 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/Kconfig          |  8 ++++++++
 | |
|  drivers/media/platform/atmel/Makefile         |  5 +++--
 | |
|  drivers/media/platform/atmel/atmel-isc-base.c | 11 +++++++++++
 | |
|  3 files changed, 22 insertions(+), 2 deletions(-)
 | |
| 
 | |
| --- a/drivers/media/platform/atmel/Kconfig
 | |
| +++ b/drivers/media/platform/atmel/Kconfig
 | |
| @@ -8,6 +8,7 @@ config VIDEO_ATMEL_ISC
 | |
|  	select VIDEOBUF2_DMA_CONTIG
 | |
|  	select REGMAP_MMIO
 | |
|  	select V4L2_FWNODE
 | |
| +	select VIDEO_ATMEL_ISC_BASE
 | |
|  	help
 | |
|  	   This module makes the ATMEL Image Sensor Controller available
 | |
|  	   as a v4l2 device.
 | |
| @@ -19,10 +20,17 @@ config VIDEO_ATMEL_XISC
 | |
|  	select VIDEOBUF2_DMA_CONTIG
 | |
|  	select REGMAP_MMIO
 | |
|  	select V4L2_FWNODE
 | |
| +	select VIDEO_ATMEL_ISC_BASE
 | |
|  	help
 | |
|  	   This module makes the ATMEL eXtended Image Sensor Controller
 | |
|  	   available as a v4l2 device.
 | |
|  
 | |
| +config VIDEO_ATMEL_ISC_BASE
 | |
| +	tristate
 | |
| +	default n
 | |
| +	help
 | |
| +	  ATMEL ISC and XISC common code base.
 | |
| +
 | |
|  config VIDEO_ATMEL_ISI
 | |
|  	tristate "ATMEL Image Sensor Interface (ISI) support"
 | |
|  	depends on VIDEO_V4L2 && OF
 | |
| --- a/drivers/media/platform/atmel/Makefile
 | |
| +++ b/drivers/media/platform/atmel/Makefile
 | |
| @@ -1,7 +1,8 @@
 | |
|  # SPDX-License-Identifier: GPL-2.0-only
 | |
| -atmel-isc-objs = atmel-sama5d2-isc.o atmel-isc-base.o
 | |
| -atmel-xisc-objs = atmel-sama7g5-isc.o atmel-isc-base.o
 | |
| +atmel-isc-objs = atmel-sama5d2-isc.o
 | |
| +atmel-xisc-objs = atmel-sama7g5-isc.o
 | |
|  
 | |
|  obj-$(CONFIG_VIDEO_ATMEL_ISI) += atmel-isi.o
 | |
| +obj-$(CONFIG_VIDEO_ATMEL_ISC_BASE) += atmel-isc-base.o
 | |
|  obj-$(CONFIG_VIDEO_ATMEL_ISC) += atmel-isc.o
 | |
|  obj-$(CONFIG_VIDEO_ATMEL_XISC) += atmel-xisc.o
 | |
| --- a/drivers/media/platform/atmel/atmel-isc-base.c
 | |
| +++ b/drivers/media/platform/atmel/atmel-isc-base.c
 | |
| @@ -378,6 +378,7 @@ int isc_clk_init(struct isc_device *isc)
 | |
|  
 | |
|  	return 0;
 | |
|  }
 | |
| +EXPORT_SYMBOL_GPL(isc_clk_init);
 | |
|  
 | |
|  void isc_clk_cleanup(struct isc_device *isc)
 | |
|  {
 | |
| @@ -392,6 +393,7 @@ void isc_clk_cleanup(struct isc_device *
 | |
|  			clk_unregister(isc_clk->clk);
 | |
|  	}
 | |
|  }
 | |
| +EXPORT_SYMBOL_GPL(isc_clk_cleanup);
 | |
|  
 | |
|  static int isc_queue_setup(struct vb2_queue *vq,
 | |
|  			    unsigned int *nbuffers, unsigned int *nplanes,
 | |
| @@ -1575,6 +1577,7 @@ irqreturn_t isc_interrupt(int irq, void
 | |
|  
 | |
|  	return ret;
 | |
|  }
 | |
| +EXPORT_SYMBOL_GPL(isc_interrupt);
 | |
|  
 | |
|  static void isc_hist_count(struct isc_device *isc, u32 *min, u32 *max)
 | |
|  {
 | |
| @@ -2209,6 +2212,7 @@ const struct v4l2_async_notifier_operati
 | |
|  	.unbind = isc_async_unbind,
 | |
|  	.complete = isc_async_complete,
 | |
|  };
 | |
| +EXPORT_SYMBOL_GPL(isc_async_ops);
 | |
|  
 | |
|  void isc_subdev_cleanup(struct isc_device *isc)
 | |
|  {
 | |
| @@ -2221,6 +2225,7 @@ void isc_subdev_cleanup(struct isc_devic
 | |
|  
 | |
|  	INIT_LIST_HEAD(&isc->subdev_entities);
 | |
|  }
 | |
| +EXPORT_SYMBOL_GPL(isc_subdev_cleanup);
 | |
|  
 | |
|  int isc_pipeline_init(struct isc_device *isc)
 | |
|  {
 | |
| @@ -2261,6 +2266,7 @@ int isc_pipeline_init(struct isc_device
 | |
|  
 | |
|  	return 0;
 | |
|  }
 | |
| +EXPORT_SYMBOL_GPL(isc_pipeline_init);
 | |
|  
 | |
|  /* regmap configuration */
 | |
|  #define ATMEL_ISC_REG_MAX    0xd5c
 | |
| @@ -2270,4 +2276,9 @@ const struct regmap_config isc_regmap_co
 | |
|  	.val_bits       = 32,
 | |
|  	.max_register	= ATMEL_ISC_REG_MAX,
 | |
|  };
 | |
| +EXPORT_SYMBOL_GPL(isc_regmap_config);
 | |
|  
 | |
| +MODULE_AUTHOR("Songjun Wu");
 | |
| +MODULE_AUTHOR("Eugen Hristev");
 | |
| +MODULE_DESCRIPTION("Atmel ISC common code base");
 | |
| +MODULE_LICENSE("GPL v2");
 | 
