 
            
            
            
            
                13 Dec
                
                    2017
                
            
            
                13 Dec
                
                '17
                
            
            
            
        
    
                11:30 p.m.
            
        On 12/11, Sriram Periyasamy wrote:
+static int skl_clk_set_rate(struct clk_hw *hw, unsigned long rate,
unsigned long parent_rate)+{
- struct skl_clk *clkdev = to_skl_clk(hw);
- struct skl_clk_rate_cfg_table *rcfg;
- int clk_type;
- if (!clkdev)
return -ENODEV;
These checks don't make sense. container_of() on clk_hw structures returning NULL wouldn't happen.
- if (!rate)
return -EINVAL;- if (__clk_is_enabled(hw->clk) && (clkdev->rate != rate))
Any chance you can directly read the hardware instead of going through the framework to find out if the clk is enabled? Seems circular to do it this way.
return -EBUSY;- rcfg = skl_get_rate_cfg(clkdev->pdata->ssp_clks[clkdev->id].rate_cfg,
rate);- if (!rcfg)
return -EINVAL;- clk_type = skl_get_clk_type(clkdev->id);
- if (clk_type < 0)
return clk_type;- skl_fill_clk_ipc(rcfg, clk_type);
- clkdev->rate = rate;
- return 0;
+}
+static unsigned long skl_clk_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)+{
- struct skl_clk *clkdev = to_skl_clk(hw);
- struct skl_clk_rate_cfg_table *rcfg;
- int clk_type;
- if (!clkdev)
return 0;- if (clkdev->rate)
return clkdev->rate;
Why is the rate being cached? We should always be able to calculate the rate based on parent_rate that gets passed to this function?
- rcfg = skl_get_rate_cfg(clkdev->pdata->ssp_clks[clkdev->id].rate_cfg,
parent_rate);- if (!rcfg)
return 0;- clk_type = skl_get_clk_type(clkdev->id);
- if (clk_type < 0)
return 0;- skl_fill_clk_ipc(rcfg, clk_type);
- clkdev->rate = rcfg->rate;
- return clkdev->rate;
+}
+/* Not supported by clk driver. Implemented to satisfy clk fw */ +long skl_clk_round_rate(struct clk_hw *hw, unsigned long rate,
unsigned long *parent_rate)+{
- return rate;
+}
-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project