Kevin, I tried the following and I get error in clk_enable(). Do you know what might be wrong?
in DM365.c CLK("isif", "master", &vpss_master_clk) The driver name is isif. I call clk_get(&pdev->dev, "master") from isif driver. The platform device name is "isif". This call succeeds, but clk_enable() fails... clk_ptr = clk_get(&pdev->dev, "master"); clk_enable(clk_ptr); r...@dm355-evm:~# cat /proc/davinci_clocks ref_clk users= 7 24000000 Hz pll1 users= 6 pll 486000000 Hz pll1_aux_clk users= 3 pll 24000000 Hz uart0 users= 1 psc 24000000 Hz i2c users= 1 psc 24000000 Hz spi4 users= 0 psc 24000000 Hz pwm0 users= 0 psc 24000000 Hz pwm1 users= 0 psc 24000000 Hz pwm2 users= 0 psc 24000000 Hz timer0 users= 1 psc 24000000 Hz timer1 users= 0 psc 24000000 Hz timer2 users= 1 psc 24000000 Hz timer3 users= 0 psc 24000000 Hz usb users= 0 psc 24000000 Hz pll1_sysclkbp users= 0 pll 24000000 Hz clkout0 users= 0 pll 24000000 Hz pll1_sysclk1 users= 0 pll 486000000 Hz pll1_sysclk2 users= 0 pll 243000000 Hz pll1_sysclk3 users= 0 pll 243000000 Hz vpss_dac users= 0 psc 243000000 Hz mjcp users= 0 psc 243000000 Hz pll1_sysclk4 users= 3 pll 121500000 Hz uart1 users= 0 psc 121500000 Hz mmcsd1 users= 0 psc 121500000 Hz spi0 users= 0 psc 121500000 Hz spi1 users= 0 psc 121500000 Hz spi2 users= 0 psc 121500000 Hz spi3 users= 0 psc 121500000 Hz gpio users= 1 psc 121500000 Hz aemif users= 1 psc 121500000 Hz emac users= 1 psc 121500000 Hz asp0 users= 0 psc 121500000 Hz rto users= 0 psc 121500000 Hz pll1_sysclk5 users= 0 pll 243000000 Hz vpss_master users= 0 psc 243000000 Hz pll1_sysclk6 users= 0 pll 27000000 Hz pll1_sysclk7 users= 0 pll 486000000 Hz pll1_sysclk8 users= 0 pll 121500000 Hz mmcsd0 users= 0 psc 121500000 Hz pll1_sysclk9 users= 0 pll 243000000 Hz pll2 users= 1 pll 594000000 Hz pll2_aux_clk users= 0 pll 24000000 Hz clkout1 users= 0 pll 24000000 Hz pll2_sysclk1 users= 0 pll 594000000 Hz pll2_sysclk2 users= 1 pll 297000000 Hz arm_clk users= 1 psc 297000000 Hz pll2_sysclk3 users= 0 pll 594000000 Hz pll2_sysclk4 users= 0 pll 20482758 Hz voice_codec users= 0 psc 20482758 Hz pll2_sysclk5 users= 0 pll 74250000 Hz pll2_sysclk6 users= 0 pll 594000000 Hz pll2_sysclk7 users= 0 pll 594000000 Hz pll2_sysclk8 users= 0 pll 594000000 Hz pll2_sysclk9 users= 0 pll 594000000 Hz pwm3 users= 0 psc 24000000 Hz r...@dm355-evm:~# Murali Karicheri Software Design Engineer Texas Instruments Inc. Germantown, MD 20874 phone: 301-407-9583 email: m-kariche...@ti.com >-----Original Message----- >From: davinci-linux-open-source-boun...@linux.davincidsp.com >[mailto:davinci-linux-open-source-boun...@linux.davincidsp.com] On Behalf >Of Karicheri, Muralidharan >Sent: Wednesday, December 09, 2009 12:45 PM >To: Kevin Hilman >Cc: davinci-linux-open-source@linux.davincidsp.com; linux- >me...@vger.kernel.org >Subject: RE: [PATCH - v1 1/2] V4L - vpfe capture - make clocks configurable > >Kevin, > >>> +/** >>> + * vpfe_disable_clock() - Disable clocks for vpfe capture driver >>> + * @vpfe_dev - ptr to vpfe capture device >>> + * >>> + * Disables clocks defined in vpfe configuration. >>> + */ >>> static void vpfe_disable_clock(struct vpfe_device *vpfe_dev) >>> { >>> struct vpfe_config *vpfe_cfg = vpfe_dev->cfg; >>> + int i; >>> >>> - clk_disable(vpfe_cfg->vpssclk); >>> - clk_put(vpfe_cfg->vpssclk); >>> - clk_disable(vpfe_cfg->slaveclk); >>> - clk_put(vpfe_cfg->slaveclk); >>> - v4l2_info(vpfe_dev->pdev->driver, >>> - "vpfe vpss master & slave clocks disabled\n"); >>> + for (i = 0; i < vpfe_cfg->num_clocks; i++) { >>> + clk_disable(vpfe_dev->clks[i]); >>> + clk_put(vpfe_dev->clks[i]); >> >>While cleaning this up, you should move the clk_put() to module >>disable/unload time. > >[MK] vpfe_disable_clock() is called from remove(). In the new >patch, from ccdc driver remove() function, clk_put() will be called. >Why do you think it should be moved to exit() function of the module? > >>You dont' need to put he clock on every disable. >>The same for clk_get(). You don't need to get the clock for every >>enable. Just do a clk_get() at init time. > >Are you suggesting to call clk_get() during init() and call clk_put() >from exit()? What is wrong with calling clk_get() from probe()? >I thought following is correct:- >Probe() >clk_get() followed by clk_enable() >Remove() >clk_disable() followed by clk_put() >Suspend() >clk_disable() >Resume() >clk_enable() >Please confirm. >_______________________________________________ >Davinci-linux-open-source mailing list >Davinci-linux-open-source@linux.davincidsp.com >http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source _______________________________________________ Davinci-linux-open-source mailing list Davinci-linux-open-source@linux.davincidsp.com http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source