Lines Matching full:smd
149 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()
213 struct sharp_memory_device *smd = drm_to_sharp_memory_device(fb->dev); in sharp_memory_fb_dirty() local
221 sharp_memory_update_display(smd, fb, clip, fmtconv_state); in sharp_memory_fb_dirty()
228 struct sharp_memory_device *smd; in sharp_memory_plane_atomic_check() local
231 smd = container_of(plane, struct sharp_memory_device, plane); in sharp_memory_plane_atomic_check()
232 crtc_state = drm_atomic_get_new_crtc_state(state, &smd->crtc); in sharp_memory_plane_atomic_check()
246 struct sharp_memory_device *smd; in sharp_memory_plane_atomic_update() local
249 smd = container_of(plane, struct sharp_memory_device, plane); in sharp_memory_plane_atomic_update()
250 if (!smd->crtc.state->active) in sharp_memory_plane_atomic_update()
285 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_mode_valid() local
287 return drm_crtc_helper_mode_valid_fixed(crtc, mode, smd->mode); in sharp_memory_crtc_mode_valid()
309 struct sharp_memory_device *smd = data; in sharp_memory_sw_vcom_signal_thread() local
312 smd->vcom ^= 1; /* Toggle vcom */ in sharp_memory_sw_vcom_signal_thread()
313 sharp_memory_maintain_display(smd); in sharp_memory_sw_vcom_signal_thread()
323 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_enable() local
325 sharp_memory_clear_display(smd); in sharp_memory_crtc_enable()
327 if (smd->enable_gpio) in sharp_memory_crtc_enable()
328 gpiod_set_value(smd->enable_gpio, 1); in sharp_memory_crtc_enable()
334 struct sharp_memory_device *smd = drm_to_sharp_memory_device(crtc->dev); in sharp_memory_crtc_disable() local
336 sharp_memory_clear_display(smd); in sharp_memory_crtc_disable()
338 if (smd->enable_gpio) in sharp_memory_crtc_disable()
339 gpiod_set_value(smd->enable_gpio, 0); in sharp_memory_crtc_disable()
364 struct sharp_memory_device *smd = drm_to_sharp_memory_device(connector->dev); in sharp_memory_connector_get_modes() local
366 return drm_connector_helper_get_modes_fixed(connector, smd->mode); in sharp_memory_connector_get_modes()
459 struct sharp_memory_device *smd, in sharp_memory_pipe_init() argument
464 struct drm_encoder *encoder = &smd->encoder; in sharp_memory_pipe_init()
465 struct drm_plane *plane = &smd->plane; in sharp_memory_pipe_init()
466 struct drm_crtc *crtc = &smd->crtc; in sharp_memory_pipe_init()
467 struct drm_connector *connector = &smd->connector; in sharp_memory_pipe_init()
490 ret = drm_connector_init(&smd->drm, &smd->connector, in sharp_memory_pipe_init()
496 drm_connector_helper_add(&smd->connector, in sharp_memory_pipe_init()
502 static int sharp_memory_init_pwm_vcom_signal(struct sharp_memory_device *smd) in sharp_memory_init_pwm_vcom_signal() argument
505 struct device *dev = &smd->spi->dev; in sharp_memory_init_pwm_vcom_signal()
508 smd->pwm_vcom_signal = devm_pwm_get(dev, NULL); in sharp_memory_init_pwm_vcom_signal()
509 if (IS_ERR(smd->pwm_vcom_signal)) in sharp_memory_init_pwm_vcom_signal()
510 return dev_err_probe(dev, PTR_ERR(smd->pwm_vcom_signal), in sharp_memory_init_pwm_vcom_signal()
513 pwm_init_state(smd->pwm_vcom_signal, &pwm_state); in sharp_memory_init_pwm_vcom_signal()
516 ret = pwm_apply_might_sleep(smd->pwm_vcom_signal, &pwm_state); in sharp_memory_init_pwm_vcom_signal()
527 struct sharp_memory_device *smd; in sharp_memory_probe() local
543 smd = devm_drm_dev_alloc(dev, &sharp_memory_drm_driver, in sharp_memory_probe()
545 if (!smd) in sharp_memory_probe()
548 spi_set_drvdata(spi, smd); in sharp_memory_probe()
550 smd->spi = spi; in sharp_memory_probe()
551 drm = &smd->drm; in sharp_memory_probe()
556 smd->enable_gpio = devm_gpiod_get_optional(dev, "enable", GPIOD_OUT_HIGH); in sharp_memory_probe()
557 if (!smd->enable_gpio) in sharp_memory_probe()
561 smd->mode = spi_get_device_match_data(spi); in sharp_memory_probe()
563 smd->pitch = (SHARP_ADDR_PERIOD + smd->mode->hdisplay + SHARP_DUMMY_PERIOD) / 8; in sharp_memory_probe()
564 smd->tx_buffer_size = (SHARP_MODE_PERIOD + in sharp_memory_probe()
565 (SHARP_ADDR_PERIOD + (smd->mode->hdisplay) + SHARP_DUMMY_PERIOD) * in sharp_memory_probe()
566 smd->mode->vdisplay) / 8; in sharp_memory_probe()
568 smd->tx_buffer = devm_kzalloc(dev, smd->tx_buffer_size, GFP_KERNEL); in sharp_memory_probe()
569 if (!smd->tx_buffer) in sharp_memory_probe()
572 mutex_init(&smd->tx_mutex); in sharp_memory_probe()
597 smd->vcom_mode = SHARP_MEMORY_SOFTWARE_VCOM; in sharp_memory_probe()
598 smd->sw_vcom_signal = kthread_run(sharp_memory_sw_vcom_signal_thread, in sharp_memory_probe()
599 smd, "sw_vcom_signal"); in sharp_memory_probe()
602 smd->vcom_mode = SHARP_MEMORY_EXTERNAL_VCOM; in sharp_memory_probe()
605 smd->vcom_mode = SHARP_MEMORY_PWM_VCOM; in sharp_memory_probe()
606 ret = sharp_memory_init_pwm_vcom_signal(smd); in sharp_memory_probe()
613 drm->mode_config.min_width = smd->mode->hdisplay; in sharp_memory_probe()
614 drm->mode_config.max_width = smd->mode->hdisplay; in sharp_memory_probe()
615 drm->mode_config.min_height = smd->mode->vdisplay; in sharp_memory_probe()
616 drm->mode_config.max_height = smd->mode->vdisplay; in sharp_memory_probe()
618 ret = sharp_memory_pipe_init(drm, smd, sharp_memory_formats, in sharp_memory_probe()
624 drm_plane_enable_fb_damage_clips(&smd->plane); in sharp_memory_probe()
638 struct sharp_memory_device *smd = spi_get_drvdata(spi); in sharp_memory_remove() local
640 drm_dev_unplug(&smd->drm); in sharp_memory_remove()
641 drm_atomic_helper_shutdown(&smd->drm); in sharp_memory_remove()
643 switch (smd->vcom_mode) { in sharp_memory_remove()
645 kthread_stop(smd->sw_vcom_signal); in sharp_memory_remove()
652 pwm_disable(smd->pwm_vcom_signal); in sharp_memory_remove()