Lines Matching refs:pisp_dmy
66 struct pisp_dmy { struct
92 #define to_pisp_dmy(sd) container_of(sd, struct pisp_dmy, subdev) argument
94 static int __pisp_dmy_power_on(struct pisp_dmy *pisp_dmy) in __pisp_dmy_power_on() argument
99 struct device *dev = &pisp_dmy->client->dev; in __pisp_dmy_power_on()
101 if (!IS_ERR_OR_NULL(pisp_dmy->pins_default)) { in __pisp_dmy_power_on()
102 ret = pinctrl_select_state(pisp_dmy->pinctrl, in __pisp_dmy_power_on()
103 pisp_dmy->pins_default); in __pisp_dmy_power_on()
108 ret = clk_prepare_enable(pisp_dmy->xvclk); in __pisp_dmy_power_on()
114 if (pisp_dmy->regulators.regulator) { in __pisp_dmy_power_on()
115 for (i = 0; i < pisp_dmy->regulators.cnt; i++) { in __pisp_dmy_power_on()
116 regulator = pisp_dmy->regulators.regulator + i; in __pisp_dmy_power_on()
132 if (!IS_ERR(pisp_dmy->pwd_gpio)) { in __pisp_dmy_power_on()
133 gpiod_direction_output(pisp_dmy->pwd_gpio, 1); in __pisp_dmy_power_on()
137 if (!IS_ERR(pisp_dmy->pwd2_gpio)) { in __pisp_dmy_power_on()
138 gpiod_direction_output(pisp_dmy->pwd2_gpio, 1); in __pisp_dmy_power_on()
142 if (!IS_ERR(pisp_dmy->pd_gpio)) { in __pisp_dmy_power_on()
143 gpiod_direction_output(pisp_dmy->pd_gpio, 1); in __pisp_dmy_power_on()
147 if (!IS_ERR(pisp_dmy->pd2_gpio)) { in __pisp_dmy_power_on()
148 gpiod_direction_output(pisp_dmy->pd2_gpio, 1); in __pisp_dmy_power_on()
152 if (!IS_ERR(pisp_dmy->rst_gpio)) { in __pisp_dmy_power_on()
153 gpiod_direction_output(pisp_dmy->rst_gpio, 0); in __pisp_dmy_power_on()
155 gpiod_direction_output(pisp_dmy->rst_gpio, 1); in __pisp_dmy_power_on()
158 if (!IS_ERR(pisp_dmy->rst2_gpio)) { in __pisp_dmy_power_on()
159 gpiod_direction_output(pisp_dmy->rst2_gpio, 0); in __pisp_dmy_power_on()
161 gpiod_direction_output(pisp_dmy->rst2_gpio, 1); in __pisp_dmy_power_on()
167 clk_disable_unprepare(pisp_dmy->xvclk); in __pisp_dmy_power_on()
172 static void __pisp_dmy_power_off(struct pisp_dmy *pisp_dmy) in __pisp_dmy_power_off() argument
177 struct device *dev = &pisp_dmy->client->dev; in __pisp_dmy_power_off()
179 if (!IS_ERR(pisp_dmy->pd_gpio)) in __pisp_dmy_power_off()
180 gpiod_direction_output(pisp_dmy->pd_gpio, 0); in __pisp_dmy_power_off()
182 if (!IS_ERR(pisp_dmy->pd2_gpio)) in __pisp_dmy_power_off()
183 gpiod_direction_output(pisp_dmy->pd2_gpio, 0); in __pisp_dmy_power_off()
185 clk_disable_unprepare(pisp_dmy->xvclk); in __pisp_dmy_power_off()
187 if (!IS_ERR(pisp_dmy->rst_gpio)) in __pisp_dmy_power_off()
188 gpiod_direction_output(pisp_dmy->rst_gpio, 0); in __pisp_dmy_power_off()
190 if (!IS_ERR(pisp_dmy->rst2_gpio)) in __pisp_dmy_power_off()
191 gpiod_direction_output(pisp_dmy->rst2_gpio, 0); in __pisp_dmy_power_off()
193 if (!IS_ERR(pisp_dmy->pwd_gpio)) in __pisp_dmy_power_off()
194 gpiod_direction_output(pisp_dmy->pwd_gpio, 0); in __pisp_dmy_power_off()
196 if (!IS_ERR(pisp_dmy->pwd2_gpio)) in __pisp_dmy_power_off()
197 gpiod_direction_output(pisp_dmy->pwd2_gpio, 0); in __pisp_dmy_power_off()
199 if (!IS_ERR_OR_NULL(pisp_dmy->pins_sleep)) { in __pisp_dmy_power_off()
200 ret = pinctrl_select_state(pisp_dmy->pinctrl, in __pisp_dmy_power_off()
201 pisp_dmy->pins_sleep); in __pisp_dmy_power_off()
206 if (pisp_dmy->regulators.regulator) { in __pisp_dmy_power_off()
207 for (i = 0; i < pisp_dmy->regulators.cnt; i++) { in __pisp_dmy_power_off()
208 regulator = pisp_dmy->regulators.regulator + i; in __pisp_dmy_power_off()
218 struct pisp_dmy *pisp_dmy = to_pisp_dmy(sd); in pisp_dmy_power() local
221 mutex_lock(&pisp_dmy->mutex); in pisp_dmy_power()
224 if (pisp_dmy->power_on == !!on) in pisp_dmy_power()
228 ret = __pisp_dmy_power_on(pisp_dmy); in pisp_dmy_power()
232 pisp_dmy->power_on = true; in pisp_dmy_power()
234 __pisp_dmy_power_off(pisp_dmy); in pisp_dmy_power()
235 pisp_dmy->power_on = false; in pisp_dmy_power()
239 mutex_unlock(&pisp_dmy->mutex); in pisp_dmy_power()
244 static void pisp_dmy_get_module_inf(struct pisp_dmy *pisp_dmy, in pisp_dmy_get_module_inf() argument
249 strlcpy(inf->base.module, pisp_dmy->module_name, in pisp_dmy_get_module_inf()
251 strlcpy(inf->base.lens, pisp_dmy->len_name, sizeof(inf->base.lens)); in pisp_dmy_get_module_inf()
256 struct pisp_dmy *pisp_dmy = to_pisp_dmy(sd); in pisp_dmy_ioctl() local
261 pisp_dmy_get_module_inf(pisp_dmy, (struct rkmodule_inf *)arg); in pisp_dmy_ioctl()
324 struct pisp_dmy *pisp_dmy = to_pisp_dmy(sd); in pisp_dmy_runtime_resume() local
326 return __pisp_dmy_power_on(pisp_dmy); in pisp_dmy_runtime_resume()
333 struct pisp_dmy *pisp_dmy = to_pisp_dmy(sd); in pisp_dmy_runtime_suspend() local
335 __pisp_dmy_power_off(pisp_dmy); in pisp_dmy_runtime_suspend()
357 static int pisp_dmy_analyze_dts(struct pisp_dmy *pisp_dmy) in pisp_dmy_analyze_dts() argument
364 struct device *dev = &pisp_dmy->client->dev; in pisp_dmy_analyze_dts()
367 pisp_dmy->xvclk = devm_clk_get(dev, "xvclk"); in pisp_dmy_analyze_dts()
368 if (IS_ERR(pisp_dmy->xvclk)) { in pisp_dmy_analyze_dts()
372 ret = clk_set_rate(pisp_dmy->xvclk, PISP_DMY_XVCLK_FREQ); in pisp_dmy_analyze_dts()
377 if (clk_get_rate(pisp_dmy->xvclk) != PISP_DMY_XVCLK_FREQ) in pisp_dmy_analyze_dts()
380 pisp_dmy->pinctrl = devm_pinctrl_get(dev); in pisp_dmy_analyze_dts()
381 if (!IS_ERR(pisp_dmy->pinctrl)) { in pisp_dmy_analyze_dts()
382 pisp_dmy->pins_default = in pisp_dmy_analyze_dts()
383 pinctrl_lookup_state(pisp_dmy->pinctrl, in pisp_dmy_analyze_dts()
385 if (IS_ERR(pisp_dmy->pins_default)) in pisp_dmy_analyze_dts()
388 pisp_dmy->pins_sleep = in pisp_dmy_analyze_dts()
389 pinctrl_lookup_state(pisp_dmy->pinctrl, in pisp_dmy_analyze_dts()
391 if (IS_ERR(pisp_dmy->pins_sleep)) in pisp_dmy_analyze_dts()
406 pisp_dmy->regulators.regulator = in pisp_dmy_analyze_dts()
407 devm_kzalloc(&pisp_dmy->client->dev, in pisp_dmy_analyze_dts()
410 if (!pisp_dmy->regulators.regulator) { in pisp_dmy_analyze_dts()
415 pisp_dmy->regulators.cnt = elem_size; in pisp_dmy_analyze_dts()
419 regulator = pisp_dmy->regulators.regulator; in pisp_dmy_analyze_dts()
443 pisp_dmy->pd_gpio = devm_gpiod_get(dev, "pd", GPIOD_OUT_LOW); in pisp_dmy_analyze_dts()
444 if (IS_ERR(pisp_dmy->pd_gpio)) in pisp_dmy_analyze_dts()
446 PTR_ERR(pisp_dmy->pd_gpio)); in pisp_dmy_analyze_dts()
448 pisp_dmy->pd2_gpio = devm_gpiod_get(dev, "pd2", GPIOD_OUT_LOW); in pisp_dmy_analyze_dts()
449 if (IS_ERR(pisp_dmy->pd2_gpio)) in pisp_dmy_analyze_dts()
451 PTR_ERR(pisp_dmy->pd2_gpio)); in pisp_dmy_analyze_dts()
453 pisp_dmy->rst_gpio = devm_gpiod_get(dev, "rst", GPIOD_OUT_LOW); in pisp_dmy_analyze_dts()
454 if (IS_ERR(pisp_dmy->rst_gpio)) in pisp_dmy_analyze_dts()
456 PTR_ERR(pisp_dmy->rst_gpio)); in pisp_dmy_analyze_dts()
458 pisp_dmy->rst2_gpio = devm_gpiod_get(dev, "rst2", GPIOD_OUT_LOW); in pisp_dmy_analyze_dts()
459 if (IS_ERR(pisp_dmy->rst2_gpio)) in pisp_dmy_analyze_dts()
461 PTR_ERR(pisp_dmy->rst2_gpio)); in pisp_dmy_analyze_dts()
463 pisp_dmy->pwd_gpio = devm_gpiod_get(dev, "pwd", GPIOD_OUT_HIGH); in pisp_dmy_analyze_dts()
464 if (IS_ERR(pisp_dmy->pwd_gpio)) in pisp_dmy_analyze_dts()
466 PTR_ERR(pisp_dmy->pwd_gpio)); in pisp_dmy_analyze_dts()
468 pisp_dmy->pwd2_gpio = devm_gpiod_get(dev, "pwd2", GPIOD_OUT_HIGH); in pisp_dmy_analyze_dts()
469 if (IS_ERR(pisp_dmy->pwd2_gpio)) in pisp_dmy_analyze_dts()
471 PTR_ERR(pisp_dmy->pwd2_gpio)); in pisp_dmy_analyze_dts()
481 struct pisp_dmy *pisp_dmy; in pisp_dmy_probe() local
490 pisp_dmy = devm_kzalloc(dev, sizeof(*pisp_dmy), GFP_KERNEL); in pisp_dmy_probe()
491 if (!pisp_dmy) in pisp_dmy_probe()
495 &pisp_dmy->module_index); in pisp_dmy_probe()
497 &pisp_dmy->module_facing); in pisp_dmy_probe()
499 &pisp_dmy->module_name); in pisp_dmy_probe()
501 &pisp_dmy->len_name); in pisp_dmy_probe()
507 pisp_dmy->client = client; in pisp_dmy_probe()
509 ret = pisp_dmy_analyze_dts(pisp_dmy); in pisp_dmy_probe()
515 mutex_init(&pisp_dmy->mutex); in pisp_dmy_probe()
517 sd = &pisp_dmy->subdev; in pisp_dmy_probe()
520 __pisp_dmy_power_on(pisp_dmy); in pisp_dmy_probe()
532 struct pisp_dmy *pisp_dmy = to_pisp_dmy(sd); in pisp_dmy_remove() local
534 mutex_destroy(&pisp_dmy->mutex); in pisp_dmy_remove()
538 __pisp_dmy_power_off(pisp_dmy); in pisp_dmy_remove()