• Home
  • Raw
  • Download

Lines Matching full:rs9

161 static u8 rs9_calc_dif(const struct rs9_driver_data *rs9, int idx)  in rs9_calc_dif()  argument
163 enum rs9_model model = rs9->chip_info->model; in rs9_calc_dif()
173 static int rs9_get_output_config(struct rs9_driver_data *rs9, int idx) in rs9_get_output_config() argument
175 struct i2c_client *client = rs9->client; in rs9_get_output_config()
176 u8 dif = rs9_calc_dif(rs9, idx); in rs9_get_output_config()
183 rs9->clk_dif_sr |= dif; in rs9_get_output_config()
195 rs9->clk_dif_sr &= ~dif; in rs9_get_output_config()
197 rs9->clk_dif_sr |= dif; in rs9_get_output_config()
206 static int rs9_get_common_config(struct rs9_driver_data *rs9) in rs9_get_common_config() argument
208 struct i2c_client *client = rs9->client; in rs9_get_common_config()
214 rs9->pll_amplitude = RS9_REG_SS_AMP_0V7; in rs9_get_common_config()
215 rs9->pll_ssc = RS9_REG_SS_SSC_100; in rs9_get_common_config()
222 rs9->pll_amplitude = RS9_REG_SS_AMP_0V6; in rs9_get_common_config()
224 rs9->pll_amplitude = RS9_REG_SS_AMP_0V7; in rs9_get_common_config()
226 rs9->pll_amplitude = RS9_REG_SS_AMP_0V8; in rs9_get_common_config()
228 rs9->pll_amplitude = RS9_REG_SS_AMP_0V9; in rs9_get_common_config()
238 rs9->pll_ssc = RS9_REG_SS_SSC_100; in rs9_get_common_config()
240 rs9->pll_ssc = RS9_REG_SS_SSC_M025; in rs9_get_common_config()
242 rs9->pll_ssc = RS9_REG_SS_SSC_M050; in rs9_get_common_config()
251 static void rs9_update_config(struct rs9_driver_data *rs9) in rs9_update_config() argument
256 if (rs9->pll_amplitude != RS9_REG_SS_AMP_0V7) { in rs9_update_config()
257 regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_AMP_MASK, in rs9_update_config()
258 rs9->pll_amplitude); in rs9_update_config()
262 if (rs9->pll_ssc != RS9_REG_SS_SSC_100) { in rs9_update_config()
263 regmap_update_bits(rs9->regmap, RS9_REG_SS, RS9_REG_SS_SSC_MASK, in rs9_update_config()
264 rs9->pll_ssc); in rs9_update_config()
267 for (i = 0; i < rs9->chip_info->num_clks; i++) { in rs9_update_config()
268 u8 dif = rs9_calc_dif(rs9, i); in rs9_update_config()
270 if (rs9->clk_dif_sr & dif) in rs9_update_config()
273 regmap_update_bits(rs9->regmap, RS9_REG_SR, dif, in rs9_update_config()
274 rs9->clk_dif_sr & dif); in rs9_update_config()
281 struct rs9_driver_data *rs9 = data; in rs9_of_clk_get() local
284 return rs9->clk_dif[idx]; in rs9_of_clk_get()
290 struct rs9_driver_data *rs9; in rs9_probe() local
295 rs9 = devm_kzalloc(&client->dev, sizeof(*rs9), GFP_KERNEL); in rs9_probe()
296 if (!rs9) in rs9_probe()
299 i2c_set_clientdata(client, rs9); in rs9_probe()
300 rs9->client = client; in rs9_probe()
301 rs9->chip_info = device_get_match_data(&client->dev); in rs9_probe()
302 if (!rs9->chip_info) in rs9_probe()
306 ret = rs9_get_common_config(rs9); in rs9_probe()
311 for (i = 0; i < rs9->chip_info->num_clks; i++) { in rs9_probe()
312 ret = rs9_get_output_config(rs9, i); in rs9_probe()
317 rs9->regmap = devm_regmap_init(&client->dev, NULL, in rs9_probe()
319 if (IS_ERR(rs9->regmap)) in rs9_probe()
320 return dev_err_probe(&client->dev, PTR_ERR(rs9->regmap), in rs9_probe()
324 ret = regmap_write(rs9->regmap, RS9_REG_BCP, 1); in rs9_probe()
328 ret = regmap_read(rs9->regmap, RS9_REG_VID, &vid); in rs9_probe()
332 ret = regmap_read(rs9->regmap, RS9_REG_DID, &did); in rs9_probe()
336 if (vid != RS9_REG_VID_IDT || did != rs9->chip_info->did) in rs9_probe()
340 rs9->chip_info->did); in rs9_probe()
343 for (i = 0; i < rs9->chip_info->num_clks; i++) { in rs9_probe()
350 rs9->clk_dif[i] = hw; in rs9_probe()
353 ret = devm_of_clk_add_hw_provider(&client->dev, rs9_of_clk_get, rs9); in rs9_probe()
355 rs9_update_config(rs9); in rs9_probe()
362 struct rs9_driver_data *rs9 = dev_get_drvdata(dev); in rs9_suspend() local
364 regcache_cache_only(rs9->regmap, true); in rs9_suspend()
365 regcache_mark_dirty(rs9->regmap); in rs9_suspend()
372 struct rs9_driver_data *rs9 = dev_get_drvdata(dev); in rs9_resume() local
375 regcache_cache_only(rs9->regmap, false); in rs9_resume()
376 ret = regcache_sync(rs9->regmap); in rs9_resume()