Re: [PATCH 02/16] media: omap3isp: allow it to build with COMPILE_TEST

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Mauro,

I love your patch! Yet something to improve:

[auto build test ERROR on linuxtv-media/master]
[also build test ERROR on v4.16 next-20180406]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Mauro-Carvalho-Chehab/Make-all-drivers-under-drivers-media-to-build-with-COMPILE_TEST/20180406-164215
base:   git://linuxtv.org/media_tree.git master
config: openrisc-allyesconfig (attached as .config)
compiler: or1k-linux-gcc (GCC) 6.0.0 20160327 (experimental)
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=openrisc 

All errors (new ones prefixed by >>):

   In file included from drivers/media/platform/omap3isp/isp.c:78:0:
   drivers/media/platform/omap3isp/isp.h:130:16: error: field 'hw' has incomplete type
     struct clk_hw hw;
                   ^~
   In file included from include/asm-generic/bug.h:5:0,
                    from ./arch/openrisc/include/generated/asm/bug.h:1,
                    from include/linux/bug.h:5,
                    from include/linux/mmdebug.h:5,
                    from include/linux/mm.h:9,
                    from arch/openrisc/include/asm/cacheflush.h:21,
                    from drivers/media/platform/omap3isp/isp.c:45:
   drivers/media/platform/omap3isp/isp.c: In function 'isp_xclk_prepare':
   include/linux/kernel.h:938:32: error: dereferencing pointer to incomplete type 'struct clk_hw'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                                   ^~~~~~
   include/linux/compiler.h:316:19: note: in definition of macro '__compiletime_assert'
      bool __cond = !(condition);    \
                      ^~~~~~~~~
   include/linux/compiler.h:339:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:45:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/kernel.h:938:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
     ^~~~~~~~~~~~~~~~
   include/linux/kernel.h:938:20: note: in expansion of macro '__same_type'
     BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
                       ^~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:167:26: note: in expansion of macro 'container_of'
    #define to_isp_xclk(_hw) container_of(_hw, struct isp_xclk, hw)
                             ^~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:187:26: note: in expansion of macro 'to_isp_xclk'
     struct isp_xclk *xclk = to_isp_xclk(hw);
                             ^~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c: At top level:
   drivers/media/platform/omap3isp/isp.c:282:21: error: variable 'isp_xclk_ops' has initializer but incomplete type
    static const struct clk_ops isp_xclk_ops = {
                        ^~~~~~~
>> drivers/media/platform/omap3isp/isp.c:283:2: error: unknown field 'prepare' specified in initializer
     .prepare = isp_xclk_prepare,
     ^
   drivers/media/platform/omap3isp/isp.c:283:13: warning: excess elements in struct initializer
     .prepare = isp_xclk_prepare,
                ^~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:283:13: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:284:2: error: unknown field 'unprepare' specified in initializer
     .unprepare = isp_xclk_unprepare,
     ^
   drivers/media/platform/omap3isp/isp.c:284:15: warning: excess elements in struct initializer
     .unprepare = isp_xclk_unprepare,
                  ^~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:284:15: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:285:2: error: unknown field 'enable' specified in initializer
     .enable = isp_xclk_enable,
     ^
   drivers/media/platform/omap3isp/isp.c:285:12: warning: excess elements in struct initializer
     .enable = isp_xclk_enable,
               ^~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:285:12: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:286:2: error: unknown field 'disable' specified in initializer
     .disable = isp_xclk_disable,
     ^
   drivers/media/platform/omap3isp/isp.c:286:13: warning: excess elements in struct initializer
     .disable = isp_xclk_disable,
                ^~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:286:13: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:287:2: error: unknown field 'recalc_rate' specified in initializer
     .recalc_rate = isp_xclk_recalc_rate,
     ^
   drivers/media/platform/omap3isp/isp.c:287:17: warning: excess elements in struct initializer
     .recalc_rate = isp_xclk_recalc_rate,
                    ^~~~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:287:17: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:288:2: error: unknown field 'round_rate' specified in initializer
     .round_rate = isp_xclk_round_rate,
     ^
   drivers/media/platform/omap3isp/isp.c:288:16: warning: excess elements in struct initializer
     .round_rate = isp_xclk_round_rate,
                   ^~~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:288:16: note: (near initialization for 'isp_xclk_ops')
>> drivers/media/platform/omap3isp/isp.c:289:2: error: unknown field 'set_rate' specified in initializer
     .set_rate = isp_xclk_set_rate,
     ^
   drivers/media/platform/omap3isp/isp.c:289:14: warning: excess elements in struct initializer
     .set_rate = isp_xclk_set_rate,
                 ^~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:289:14: note: (near initialization for 'isp_xclk_ops')
   drivers/media/platform/omap3isp/isp.c:294:21: error: variable 'isp_xclk_init_data' has initializer but incomplete type
    static const struct clk_init_data isp_xclk_init_data = {
                        ^~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:295:2: error: unknown field 'name' specified in initializer
     .name = "cam_xclk",
     ^
   drivers/media/platform/omap3isp/isp.c:295:10: warning: excess elements in struct initializer
     .name = "cam_xclk",
             ^~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:295:10: note: (near initialization for 'isp_xclk_init_data')
   drivers/media/platform/omap3isp/isp.c:296:2: error: unknown field 'ops' specified in initializer
     .ops = &isp_xclk_ops,
     ^
   drivers/media/platform/omap3isp/isp.c:296:9: warning: excess elements in struct initializer
     .ops = &isp_xclk_ops,
            ^
   drivers/media/platform/omap3isp/isp.c:296:9: note: (near initialization for 'isp_xclk_init_data')
   drivers/media/platform/omap3isp/isp.c:297:2: error: unknown field 'parent_names' specified in initializer
     .parent_names = &isp_xclk_parent_name,
     ^
   drivers/media/platform/omap3isp/isp.c:297:18: warning: excess elements in struct initializer
     .parent_names = &isp_xclk_parent_name,
                     ^
   drivers/media/platform/omap3isp/isp.c:297:18: note: (near initialization for 'isp_xclk_init_data')
   drivers/media/platform/omap3isp/isp.c:298:2: error: unknown field 'num_parents' specified in initializer
     .num_parents = 1,
     ^
   drivers/media/platform/omap3isp/isp.c:298:17: warning: excess elements in struct initializer
     .num_parents = 1,
                    ^
   drivers/media/platform/omap3isp/isp.c:298:17: note: (near initialization for 'isp_xclk_init_data')
   drivers/media/platform/omap3isp/isp.c: In function 'isp_xclk_init':
   drivers/media/platform/omap3isp/isp.c:315:23: error: storage size of 'init' isn't known
     struct clk_init_data init;
                          ^~~~
>> drivers/media/platform/omap3isp/isp.c:341:15: error: implicit declaration of function 'clk_register' [-Werror=implicit-function-declaration]
      xclk->clk = clk_register(NULL, &xclk->hw);
                  ^~~~~~~~~~~~
>> drivers/media/platform/omap3isp/isp.c:347:3: error: implicit declaration of function 'of_clk_add_provider' [-Werror=implicit-function-declaration]
      of_clk_add_provider(np, isp_xclk_src_get, isp);
      ^~~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:315:23: warning: unused variable 'init' [-Wunused-variable]
     struct clk_init_data init;
                          ^~~~
   drivers/media/platform/omap3isp/isp.c: In function 'isp_xclk_cleanup':
>> drivers/media/platform/omap3isp/isp.c:358:3: error: implicit declaration of function 'of_clk_del_provider' [-Werror=implicit-function-declaration]
      of_clk_del_provider(np);
      ^~~~~~~~~~~~~~~~~~~
>> drivers/media/platform/omap3isp/isp.c:364:4: error: implicit declaration of function 'clk_unregister' [-Werror=implicit-function-declaration]
       clk_unregister(xclk->clk);
       ^~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c: At top level:
   drivers/media/platform/omap3isp/isp.c:282:29: error: storage size of 'isp_xclk_ops' isn't known
    static const struct clk_ops isp_xclk_ops = {
                                ^~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:294:35: error: storage size of 'isp_xclk_init_data' isn't known
    static const struct clk_init_data isp_xclk_init_data = {
                                      ^~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:1020:13: warning: 'isp_resume_modules' defined but not used [-Wunused-function]
    static void isp_resume_modules(struct isp_device *isp)
                ^~~~~~~~~~~~~~~~~~
   drivers/media/platform/omap3isp/isp.c:986:12: warning: 'isp_suspend_modules' defined but not used [-Wunused-function]
    static int isp_suspend_modules(struct isp_device *isp)
               ^~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/prepare +283 drivers/media/platform/omap3isp/isp.c

9b28ee3c Laurent Pinchart   2012-10-22  184  
9b28ee3c Laurent Pinchart   2012-10-22  185  static int isp_xclk_prepare(struct clk_hw *hw)
9b28ee3c Laurent Pinchart   2012-10-22  186  {
9b28ee3c Laurent Pinchart   2012-10-22 @187  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  188  
9b28ee3c Laurent Pinchart   2012-10-22  189  	omap3isp_get(xclk->isp);
9b28ee3c Laurent Pinchart   2012-10-22  190  
9b28ee3c Laurent Pinchart   2012-10-22  191  	return 0;
9b28ee3c Laurent Pinchart   2012-10-22  192  }
9b28ee3c Laurent Pinchart   2012-10-22  193  
9b28ee3c Laurent Pinchart   2012-10-22  194  static void isp_xclk_unprepare(struct clk_hw *hw)
9b28ee3c Laurent Pinchart   2012-10-22  195  {
9b28ee3c Laurent Pinchart   2012-10-22  196  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  197  
9b28ee3c Laurent Pinchart   2012-10-22  198  	omap3isp_put(xclk->isp);
9b28ee3c Laurent Pinchart   2012-10-22  199  }
9b28ee3c Laurent Pinchart   2012-10-22  200  
9b28ee3c Laurent Pinchart   2012-10-22  201  static int isp_xclk_enable(struct clk_hw *hw)
9b28ee3c Laurent Pinchart   2012-10-22  202  {
9b28ee3c Laurent Pinchart   2012-10-22  203  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  204  	unsigned long flags;
9b28ee3c Laurent Pinchart   2012-10-22  205  
9b28ee3c Laurent Pinchart   2012-10-22  206  	spin_lock_irqsave(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  207  	isp_xclk_update(xclk, xclk->divider);
9b28ee3c Laurent Pinchart   2012-10-22  208  	xclk->enabled = true;
9b28ee3c Laurent Pinchart   2012-10-22  209  	spin_unlock_irqrestore(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  210  
9b28ee3c Laurent Pinchart   2012-10-22  211  	return 0;
9b28ee3c Laurent Pinchart   2012-10-22  212  }
9b28ee3c Laurent Pinchart   2012-10-22  213  
9b28ee3c Laurent Pinchart   2012-10-22  214  static void isp_xclk_disable(struct clk_hw *hw)
9b28ee3c Laurent Pinchart   2012-10-22  215  {
9b28ee3c Laurent Pinchart   2012-10-22  216  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  217  	unsigned long flags;
9b28ee3c Laurent Pinchart   2012-10-22  218  
9b28ee3c Laurent Pinchart   2012-10-22  219  	spin_lock_irqsave(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  220  	isp_xclk_update(xclk, 0);
9b28ee3c Laurent Pinchart   2012-10-22  221  	xclk->enabled = false;
9b28ee3c Laurent Pinchart   2012-10-22  222  	spin_unlock_irqrestore(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  223  }
9b28ee3c Laurent Pinchart   2012-10-22  224  
9b28ee3c Laurent Pinchart   2012-10-22  225  static unsigned long isp_xclk_recalc_rate(struct clk_hw *hw,
9b28ee3c Laurent Pinchart   2012-10-22  226  					  unsigned long parent_rate)
9b28ee3c Laurent Pinchart   2012-10-22  227  {
9b28ee3c Laurent Pinchart   2012-10-22  228  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  229  
9b28ee3c Laurent Pinchart   2012-10-22  230  	return parent_rate / xclk->divider;
9b28ee3c Laurent Pinchart   2012-10-22  231  }
9b28ee3c Laurent Pinchart   2012-10-22  232  
9b28ee3c Laurent Pinchart   2012-10-22  233  static u32 isp_xclk_calc_divider(unsigned long *rate, unsigned long parent_rate)
9b28ee3c Laurent Pinchart   2012-10-22  234  {
9b28ee3c Laurent Pinchart   2012-10-22  235  	u32 divider;
9b28ee3c Laurent Pinchart   2012-10-22  236  
9b28ee3c Laurent Pinchart   2012-10-22  237  	if (*rate >= parent_rate) {
9b28ee3c Laurent Pinchart   2012-10-22  238  		*rate = parent_rate;
9b28ee3c Laurent Pinchart   2012-10-22  239  		return ISPTCTRL_CTRL_DIV_BYPASS;
9b28ee3c Laurent Pinchart   2012-10-22  240  	}
9b28ee3c Laurent Pinchart   2012-10-22  241  
aadec012 Laurent Pinchart   2014-09-25  242  	if (*rate == 0)
aadec012 Laurent Pinchart   2014-09-25  243  		*rate = 1;
aadec012 Laurent Pinchart   2014-09-25  244  
9b28ee3c Laurent Pinchart   2012-10-22  245  	divider = DIV_ROUND_CLOSEST(parent_rate, *rate);
9b28ee3c Laurent Pinchart   2012-10-22  246  	if (divider >= ISPTCTRL_CTRL_DIV_BYPASS)
9b28ee3c Laurent Pinchart   2012-10-22  247  		divider = ISPTCTRL_CTRL_DIV_BYPASS - 1;
9b28ee3c Laurent Pinchart   2012-10-22  248  
9b28ee3c Laurent Pinchart   2012-10-22  249  	*rate = parent_rate / divider;
9b28ee3c Laurent Pinchart   2012-10-22  250  	return divider;
9b28ee3c Laurent Pinchart   2012-10-22  251  }
9b28ee3c Laurent Pinchart   2012-10-22  252  
9b28ee3c Laurent Pinchart   2012-10-22  253  static long isp_xclk_round_rate(struct clk_hw *hw, unsigned long rate,
9b28ee3c Laurent Pinchart   2012-10-22  254  				unsigned long *parent_rate)
9b28ee3c Laurent Pinchart   2012-10-22  255  {
9b28ee3c Laurent Pinchart   2012-10-22  256  	isp_xclk_calc_divider(&rate, *parent_rate);
9b28ee3c Laurent Pinchart   2012-10-22  257  	return rate;
9b28ee3c Laurent Pinchart   2012-10-22  258  }
9b28ee3c Laurent Pinchart   2012-10-22  259  
9b28ee3c Laurent Pinchart   2012-10-22  260  static int isp_xclk_set_rate(struct clk_hw *hw, unsigned long rate,
9b28ee3c Laurent Pinchart   2012-10-22  261  			     unsigned long parent_rate)
9b28ee3c Laurent Pinchart   2012-10-22  262  {
9b28ee3c Laurent Pinchart   2012-10-22  263  	struct isp_xclk *xclk = to_isp_xclk(hw);
9b28ee3c Laurent Pinchart   2012-10-22  264  	unsigned long flags;
9b28ee3c Laurent Pinchart   2012-10-22  265  	u32 divider;
9b28ee3c Laurent Pinchart   2012-10-22  266  
9b28ee3c Laurent Pinchart   2012-10-22  267  	divider = isp_xclk_calc_divider(&rate, parent_rate);
9b28ee3c Laurent Pinchart   2012-10-22  268  
9b28ee3c Laurent Pinchart   2012-10-22  269  	spin_lock_irqsave(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  270  
9b28ee3c Laurent Pinchart   2012-10-22  271  	xclk->divider = divider;
9b28ee3c Laurent Pinchart   2012-10-22  272  	if (xclk->enabled)
9b28ee3c Laurent Pinchart   2012-10-22  273  		isp_xclk_update(xclk, divider);
9b28ee3c Laurent Pinchart   2012-10-22  274  
9b28ee3c Laurent Pinchart   2012-10-22  275  	spin_unlock_irqrestore(&xclk->lock, flags);
9b28ee3c Laurent Pinchart   2012-10-22  276  
9b28ee3c Laurent Pinchart   2012-10-22  277  	dev_dbg(xclk->isp->dev, "%s: cam_xclk%c set to %lu Hz (div %u)\n",
9b28ee3c Laurent Pinchart   2012-10-22  278  		__func__, xclk->id == ISP_XCLK_A ? 'a' : 'b', rate, divider);
9b28ee3c Laurent Pinchart   2012-10-22  279  	return 0;
9b28ee3c Laurent Pinchart   2012-10-22  280  }
9b28ee3c Laurent Pinchart   2012-10-22  281  
9b28ee3c Laurent Pinchart   2012-10-22  282  static const struct clk_ops isp_xclk_ops = {
9b28ee3c Laurent Pinchart   2012-10-22 @283  	.prepare = isp_xclk_prepare,
9b28ee3c Laurent Pinchart   2012-10-22 @284  	.unprepare = isp_xclk_unprepare,
9b28ee3c Laurent Pinchart   2012-10-22 @285  	.enable = isp_xclk_enable,
9b28ee3c Laurent Pinchart   2012-10-22 @286  	.disable = isp_xclk_disable,
9b28ee3c Laurent Pinchart   2012-10-22 @287  	.recalc_rate = isp_xclk_recalc_rate,
9b28ee3c Laurent Pinchart   2012-10-22 @288  	.round_rate = isp_xclk_round_rate,
9b28ee3c Laurent Pinchart   2012-10-22 @289  	.set_rate = isp_xclk_set_rate,
9b28ee3c Laurent Pinchart   2012-10-22  290  };
9b28ee3c Laurent Pinchart   2012-10-22  291  
9b28ee3c Laurent Pinchart   2012-10-22  292  static const char *isp_xclk_parent_name = "cam_mclk";
9b28ee3c Laurent Pinchart   2012-10-22  293  
9b28ee3c Laurent Pinchart   2012-10-22  294  static const struct clk_init_data isp_xclk_init_data = {
9b28ee3c Laurent Pinchart   2012-10-22  295  	.name = "cam_xclk",
9b28ee3c Laurent Pinchart   2012-10-22  296  	.ops = &isp_xclk_ops,
9b28ee3c Laurent Pinchart   2012-10-22  297  	.parent_names = &isp_xclk_parent_name,
9b28ee3c Laurent Pinchart   2012-10-22 @298  	.num_parents = 1,
9b28ee3c Laurent Pinchart   2012-10-22  299  };
9b28ee3c Laurent Pinchart   2012-10-22  300  
64904b57 Laurent Pinchart   2015-03-25  301  static struct clk *isp_xclk_src_get(struct of_phandle_args *clkspec, void *data)
64904b57 Laurent Pinchart   2015-03-25  302  {
64904b57 Laurent Pinchart   2015-03-25  303  	unsigned int idx = clkspec->args[0];
64904b57 Laurent Pinchart   2015-03-25  304  	struct isp_device *isp = data;
64904b57 Laurent Pinchart   2015-03-25  305  
64904b57 Laurent Pinchart   2015-03-25  306  	if (idx >= ARRAY_SIZE(isp->xclks))
64904b57 Laurent Pinchart   2015-03-25  307  		return ERR_PTR(-ENOENT);
64904b57 Laurent Pinchart   2015-03-25  308  
64904b57 Laurent Pinchart   2015-03-25  309  	return isp->xclks[idx].clk;
64904b57 Laurent Pinchart   2015-03-25  310  }
64904b57 Laurent Pinchart   2015-03-25  311  
9b28ee3c Laurent Pinchart   2012-10-22  312  static int isp_xclk_init(struct isp_device *isp)
9b28ee3c Laurent Pinchart   2012-10-22  313  {
64904b57 Laurent Pinchart   2015-03-25  314  	struct device_node *np = isp->dev->of_node;
9b28ee3c Laurent Pinchart   2012-10-22 @315  	struct clk_init_data init;
9b28ee3c Laurent Pinchart   2012-10-22  316  	unsigned int i;
9b28ee3c Laurent Pinchart   2012-10-22  317  
f8e2ff26 Sylwester Nawrocki 2013-12-04  318  	for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i)
f8e2ff26 Sylwester Nawrocki 2013-12-04  319  		isp->xclks[i].clk = ERR_PTR(-EINVAL);
f8e2ff26 Sylwester Nawrocki 2013-12-04  320  
9b28ee3c Laurent Pinchart   2012-10-22  321  	for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
9b28ee3c Laurent Pinchart   2012-10-22  322  		struct isp_xclk *xclk = &isp->xclks[i];
9b28ee3c Laurent Pinchart   2012-10-22  323  
9b28ee3c Laurent Pinchart   2012-10-22  324  		xclk->isp = isp;
9b28ee3c Laurent Pinchart   2012-10-22  325  		xclk->id = i == 0 ? ISP_XCLK_A : ISP_XCLK_B;
9b28ee3c Laurent Pinchart   2012-10-22  326  		xclk->divider = 1;
9b28ee3c Laurent Pinchart   2012-10-22  327  		spin_lock_init(&xclk->lock);
9b28ee3c Laurent Pinchart   2012-10-22  328  
9b28ee3c Laurent Pinchart   2012-10-22  329  		init.name = i == 0 ? "cam_xclka" : "cam_xclkb";
9b28ee3c Laurent Pinchart   2012-10-22  330  		init.ops = &isp_xclk_ops;
9b28ee3c Laurent Pinchart   2012-10-22  331  		init.parent_names = &isp_xclk_parent_name;
9b28ee3c Laurent Pinchart   2012-10-22  332  		init.num_parents = 1;
9b28ee3c Laurent Pinchart   2012-10-22  333  
9b28ee3c Laurent Pinchart   2012-10-22  334  		xclk->hw.init = &init;
f8e2ff26 Sylwester Nawrocki 2013-12-04  335  		/*
f8e2ff26 Sylwester Nawrocki 2013-12-04  336  		 * The first argument is NULL in order to avoid circular
f8e2ff26 Sylwester Nawrocki 2013-12-04  337  		 * reference, as this driver takes reference on the
f8e2ff26 Sylwester Nawrocki 2013-12-04  338  		 * sensor subdevice modules and the sensors would take
f8e2ff26 Sylwester Nawrocki 2013-12-04  339  		 * reference on this module through clk_get().
f8e2ff26 Sylwester Nawrocki 2013-12-04  340  		 */
f8e2ff26 Sylwester Nawrocki 2013-12-04 @341  		xclk->clk = clk_register(NULL, &xclk->hw);
f8e2ff26 Sylwester Nawrocki 2013-12-04  342  		if (IS_ERR(xclk->clk))
f8e2ff26 Sylwester Nawrocki 2013-12-04  343  			return PTR_ERR(xclk->clk);
9b28ee3c Laurent Pinchart   2012-10-22  344  	}
9b28ee3c Laurent Pinchart   2012-10-22  345  
64904b57 Laurent Pinchart   2015-03-25  346  	if (np)
64904b57 Laurent Pinchart   2015-03-25 @347  		of_clk_add_provider(np, isp_xclk_src_get, isp);
64904b57 Laurent Pinchart   2015-03-25  348  
9b28ee3c Laurent Pinchart   2012-10-22  349  	return 0;
9b28ee3c Laurent Pinchart   2012-10-22  350  }
9b28ee3c Laurent Pinchart   2012-10-22  351  
9b28ee3c Laurent Pinchart   2012-10-22  352  static void isp_xclk_cleanup(struct isp_device *isp)
9b28ee3c Laurent Pinchart   2012-10-22  353  {
64904b57 Laurent Pinchart   2015-03-25  354  	struct device_node *np = isp->dev->of_node;
9b28ee3c Laurent Pinchart   2012-10-22  355  	unsigned int i;
9b28ee3c Laurent Pinchart   2012-10-22  356  
64904b57 Laurent Pinchart   2015-03-25  357  	if (np)
64904b57 Laurent Pinchart   2015-03-25 @358  		of_clk_del_provider(np);
64904b57 Laurent Pinchart   2015-03-25  359  
9b28ee3c Laurent Pinchart   2012-10-22  360  	for (i = 0; i < ARRAY_SIZE(isp->xclks); ++i) {
9b28ee3c Laurent Pinchart   2012-10-22  361  		struct isp_xclk *xclk = &isp->xclks[i];
9b28ee3c Laurent Pinchart   2012-10-22  362  
f8e2ff26 Sylwester Nawrocki 2013-12-04  363  		if (!IS_ERR(xclk->clk))
f8e2ff26 Sylwester Nawrocki 2013-12-04 @364  			clk_unregister(xclk->clk);
9b28ee3c Laurent Pinchart   2012-10-22  365  	}
9b28ee3c Laurent Pinchart   2012-10-22  366  }
9b28ee3c Laurent Pinchart   2012-10-22  367  

:::::: The code at line 283 was first introduced by commit
:::::: 9b28ee3c9122cea62f2db02f5bb1e1606bb343a6 [media] omap3isp: Use the common clock framework

:::::: TO: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
:::::: CC: Mauro Carvalho Chehab <mchehab@xxxxxxxxxx>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux