Lines Matching refs:smd

148 static int sharp_memory_update_display(struct sharp_memory_device *smd,  in sharp_memory_update_display()  argument
155 u32 pitch = smd->pitch; in sharp_memory_update_display()
156 u8 vcom = smd->vcom; in sharp_memory_update_display()
157 u8 *tx_buffer = smd->tx_buffer; in sharp_memory_update_display()
158 u32 tx_buffer_size = smd->tx_buffer_size; in sharp_memory_update_display()
160 mutex_lock(&smd->tx_mutex); in sharp_memory_update_display()
168 ret = sharp_memory_spi_write(smd->spi, tx_buffer, tx_buffer_size); in sharp_memory_update_display()
170 mutex_unlock(&smd->tx_mutex); in sharp_memory_update_display()
175 static int sharp_memory_maintain_display(struct sharp_memory_device *smd) in sharp_memory_maintain_display() argument
178 u8 vcom = smd->vcom; in sharp_memory_maintain_display()
179 u8 *tx_buffer = smd->tx_buffer; in sharp_memory_maintain_display()
181 mutex_lock(&smd->tx_mutex); in sharp_memory_maintain_display()
185 ret = sharp_memory_spi_write(smd->spi, tx_buffer, 2); in sharp_memory_maintain_display()
187 mutex_unlock(&smd->tx_mutex); in sharp_memory_maintain_display()
192 static int sharp_memory_clear_display(struct sharp_memory_device *smd) in sharp_memory_clear_display() argument
195 u8 vcom = smd->vcom; in sharp_memory_clear_display()
196 u8 *tx_buffer = smd->tx_buffer; in sharp_memory_clear_display()
198 mutex_lock(&smd->tx_mutex); in sharp_memory_clear_display()
202 ret = sharp_memory_spi_write(smd->spi, tx_buffer, 2); in sharp_memory_clear_display()
204 mutex_unlock(&smd->tx_mutex); in sharp_memory_clear_display()
214 struct sharp_memory_device *smd = drm_to_sharp_memory_device(fb->dev); in sharp_memory_fb_dirty() local
222 sharp_memory_update_display(smd, fb, vmap, clip, fmtconv_state); in sharp_memory_fb_dirty()
229 struct sharp_memory_device *smd; in sharp_memory_plane_atomic_check() local
232 smd = container_of(plane, struct sharp_memory_device, plane); in sharp_memory_plane_atomic_check()
233 crtc_state = drm_atomic_get_new_crtc_state(state, &smd->crtc); in sharp_memory_plane_atomic_check()
247 struct sharp_memory_device *smd; in sharp_memory_plane_atomic_update() local
250 smd = container_of(plane, struct sharp_memory_device, plane); in sharp_memory_plane_atomic_update()
251 if (!smd->crtc.state->active) in sharp_memory_plane_atomic_update()
284 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_mode_valid() local
286 return drm_crtc_helper_mode_valid_fixed(crtc, mode, smd->mode); in sharp_memory_crtc_mode_valid()
308 struct sharp_memory_device *smd = data; in sharp_memory_sw_vcom_signal_thread() local
311 smd->vcom ^= 1; /* Toggle vcom */ in sharp_memory_sw_vcom_signal_thread()
312 sharp_memory_maintain_display(smd); in sharp_memory_sw_vcom_signal_thread()
322 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_enable() local
324 sharp_memory_clear_display(smd); in sharp_memory_crtc_enable()
326 if (smd->enable_gpio) in sharp_memory_crtc_enable()
327 gpiod_set_value(smd->enable_gpio, 1); in sharp_memory_crtc_enable()
333 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_disable() local
335 sharp_memory_clear_display(smd); in sharp_memory_crtc_disable()
337 if (smd->enable_gpio) in sharp_memory_crtc_disable()
338 gpiod_set_value(smd->enable_gpio, 0); in sharp_memory_crtc_disable()
363 struct sharp_memory_device *smd = drm_to_sharp_memory_device(connector->dev); in sharp_memory_connector_get_modes() local
365 return drm_connector_helper_get_modes_fixed(connector, smd->mode); in sharp_memory_connector_get_modes()
458 struct sharp_memory_device *smd, in sharp_memory_pipe_init() argument
463 struct drm_encoder *encoder = &smd->encoder; in sharp_memory_pipe_init()
464 struct drm_plane *plane = &smd->plane; in sharp_memory_pipe_init()
465 struct drm_crtc *crtc = &smd->crtc; in sharp_memory_pipe_init()
466 struct drm_connector *connector = &smd->connector; in sharp_memory_pipe_init()
489 ret = drm_connector_init(&smd->drm, &smd->connector, in sharp_memory_pipe_init()
495 drm_connector_helper_add(&smd->connector, in sharp_memory_pipe_init()
501 static int sharp_memory_init_pwm_vcom_signal(struct sharp_memory_device *smd) in sharp_memory_init_pwm_vcom_signal() argument
504 struct device *dev = &smd->spi->dev; in sharp_memory_init_pwm_vcom_signal()
507 smd->pwm_vcom_signal = devm_pwm_get(dev, NULL); in sharp_memory_init_pwm_vcom_signal()
508 if (IS_ERR(smd->pwm_vcom_signal)) in sharp_memory_init_pwm_vcom_signal()
509 return dev_err_probe(dev, PTR_ERR(smd->pwm_vcom_signal), in sharp_memory_init_pwm_vcom_signal()
512 pwm_init_state(smd->pwm_vcom_signal, &pwm_state); in sharp_memory_init_pwm_vcom_signal()
515 ret = pwm_apply_might_sleep(smd->pwm_vcom_signal, &pwm_state); in sharp_memory_init_pwm_vcom_signal()
526 struct sharp_memory_device *smd; in sharp_memory_probe() local
542 smd = devm_drm_dev_alloc(dev, &sharp_memory_drm_driver, in sharp_memory_probe()
544 if (IS_ERR(smd)) in sharp_memory_probe()
545 return PTR_ERR(smd); in sharp_memory_probe()
547 spi_set_drvdata(spi, smd); in sharp_memory_probe()
549 smd->spi = spi; in sharp_memory_probe()
550 drm = &smd->drm; in sharp_memory_probe()
555 smd->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_HIGH); in sharp_memory_probe()
556 if (!smd->enable_gpio) in sharp_memory_probe()
560 smd->mode = spi_get_device_match_data(spi); in sharp_memory_probe()
562 smd->pitch = (SHARP_ADDR_PERIOD + smd->mode->hdisplay + SHARP_DUMMY_PERIOD) / 8; in sharp_memory_probe()
563 smd->tx_buffer_size = (SHARP_MODE_PERIOD + in sharp_memory_probe()
564 (SHARP_ADDR_PERIOD + (smd->mode->hdisplay) + SHARP_DUMMY_PERIOD) * in sharp_memory_probe()
565 smd->mode->vdisplay) / 8; in sharp_memory_probe()
567 smd->tx_buffer = devm_kzalloc(dev, smd->tx_buffer_size, GFP_KERNEL); in sharp_memory_probe()
568 if (!smd->tx_buffer) in sharp_memory_probe()
571 mutex_init(&smd->tx_mutex); in sharp_memory_probe()
596 smd->vcom_mode = SHARP_MEMORY_SOFTWARE_VCOM; in sharp_memory_probe()
597 smd->sw_vcom_signal = kthread_run(sharp_memory_sw_vcom_signal_thread, in sharp_memory_probe()
598 smd, "sw_vcom_signal"); in sharp_memory_probe()
601 smd->vcom_mode = SHARP_MEMORY_EXTERNAL_VCOM; in sharp_memory_probe()
604 smd->vcom_mode = SHARP_MEMORY_PWM_VCOM; in sharp_memory_probe()
605 ret = sharp_memory_init_pwm_vcom_signal(smd); in sharp_memory_probe()
612 drm->mode_config.min_width = smd->mode->hdisplay; in sharp_memory_probe()
613 drm->mode_config.max_width = smd->mode->hdisplay; in sharp_memory_probe()
614 drm->mode_config.min_height = smd->mode->vdisplay; in sharp_memory_probe()
615 drm->mode_config.max_height = smd->mode->vdisplay; in sharp_memory_probe()
617 ret = sharp_memory_pipe_init(drm, smd, sharp_memory_formats, in sharp_memory_probe()
623 drm_plane_enable_fb_damage_clips(&smd->plane); in sharp_memory_probe()
637 struct sharp_memory_device *smd = spi_get_drvdata(spi); in sharp_memory_remove() local
639 drm_dev_unplug(&smd->drm); in sharp_memory_remove()
640 drm_atomic_helper_shutdown(&smd->drm); in sharp_memory_remove()
642 switch (smd->vcom_mode) { in sharp_memory_remove()
644 kthread_stop(smd->sw_vcom_signal); in sharp_memory_remove()
651 pwm_disable(smd->pwm_vcom_signal); in sharp_memory_remove()