Lines Matching refs:epd

199 static void repaper_even_pixels(struct repaper_epd *epd, u8 **pp,  in repaper_even_pixels()  argument
205 for (b = 0; b < (epd->width / 8); b++) { in repaper_even_pixels()
245 static void repaper_odd_pixels(struct repaper_epd *epd, u8 **pp, in repaper_odd_pixels() argument
251 for (b = epd->width / 8; b > 0; b--) { in repaper_odd_pixels()
295 static void repaper_all_pixels(struct repaper_epd *epd, u8 **pp, in repaper_all_pixels() argument
301 for (b = epd->width / 8; b > 0; b--) { in repaper_all_pixels()
339 static void repaper_one_line(struct repaper_epd *epd, unsigned int line, in repaper_one_line() argument
343 u8 *p = epd->line_buffer; in repaper_one_line()
346 repaper_spi_mosi_low(epd->spi); in repaper_one_line()
348 if (epd->pre_border_byte) in repaper_one_line()
351 if (epd->middle_scan) { in repaper_one_line()
353 repaper_odd_pixels(epd, &p, data, fixed_value, mask, stage); in repaper_one_line()
356 for (b = epd->bytes_per_scan; b > 0; b--) { in repaper_one_line()
364 repaper_even_pixels(epd, &p, data, fixed_value, mask, stage); in repaper_one_line()
370 for (b = 0; b < epd->bytes_per_scan; b++) { in repaper_one_line()
378 repaper_all_pixels(epd, &p, data, fixed_value, mask, stage); in repaper_one_line()
384 for (b = epd->bytes_per_scan; b > 0; b--) { in repaper_one_line()
392 switch (epd->border_byte) { in repaper_one_line()
414 repaper_write_buf(epd->spi, 0x0a, epd->line_buffer, in repaper_one_line()
415 p - epd->line_buffer); in repaper_one_line()
418 repaper_write_val(epd->spi, 0x02, 0x07); in repaper_one_line()
420 repaper_spi_mosi_low(epd->spi); in repaper_one_line()
423 static void repaper_frame_fixed(struct repaper_epd *epd, u8 fixed_value, in repaper_frame_fixed() argument
428 for (line = 0; line < epd->height; line++) in repaper_frame_fixed()
429 repaper_one_line(epd, line, NULL, fixed_value, NULL, stage); in repaper_frame_fixed()
432 static void repaper_frame_data(struct repaper_epd *epd, const u8 *image, in repaper_frame_data() argument
438 for (line = 0; line < epd->height; line++) { in repaper_frame_data()
439 repaper_one_line(epd, line, in repaper_frame_data()
440 &image[line * (epd->width / 8)], in repaper_frame_data()
444 for (line = 0; line < epd->height; line++) { in repaper_frame_data()
445 size_t n = line * epd->width / 8; in repaper_frame_data()
447 repaper_one_line(epd, line, &image[n], 0, &mask[n], in repaper_frame_data()
453 static void repaper_frame_fixed_repeat(struct repaper_epd *epd, u8 fixed_value, in repaper_frame_fixed_repeat() argument
457 u64 end = start + (epd->factored_stage_time * 1000 * 1000); in repaper_frame_fixed_repeat()
460 repaper_frame_fixed(epd, fixed_value, stage); in repaper_frame_fixed_repeat()
464 static void repaper_frame_data_repeat(struct repaper_epd *epd, const u8 *image, in repaper_frame_data_repeat() argument
468 u64 end = start + (epd->factored_stage_time * 1000 * 1000); in repaper_frame_data_repeat()
471 repaper_frame_data(epd, image, mask, stage); in repaper_frame_data_repeat()
475 static void repaper_get_temperature(struct repaper_epd *epd) in repaper_get_temperature() argument
480 if (!epd->thermal) in repaper_get_temperature()
483 ret = thermal_zone_get_temp(epd->thermal, &temperature); in repaper_get_temperature()
485 DRM_DEV_ERROR(&epd->spi->dev, "Failed to get temperature (%d)\n", ret); in repaper_get_temperature()
508 epd->factored_stage_time = epd->stage_time * factor10x / 10; in repaper_get_temperature()
535 struct repaper_epd *epd = drm_to_epd(fb->dev); in repaper_fb_dirty() local
540 if (!epd->enabled) in repaper_fb_dirty()
552 repaper_get_temperature(epd); in repaper_fb_dirty()
555 epd->factored_stage_time); in repaper_fb_dirty()
581 if (epd->partial) { in repaper_fb_dirty()
582 repaper_frame_data_repeat(epd, buf, epd->current_frame, in repaper_fb_dirty()
584 } else if (epd->cleared) { in repaper_fb_dirty()
585 repaper_frame_data_repeat(epd, epd->current_frame, NULL, in repaper_fb_dirty()
587 repaper_frame_data_repeat(epd, epd->current_frame, NULL, in repaper_fb_dirty()
589 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_INVERSE); in repaper_fb_dirty()
590 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_NORMAL); in repaper_fb_dirty()
592 epd->partial = true; in repaper_fb_dirty()
595 repaper_frame_fixed_repeat(epd, 0xff, REPAPER_COMPENSATE); in repaper_fb_dirty()
596 repaper_frame_fixed_repeat(epd, 0xff, REPAPER_WHITE); in repaper_fb_dirty()
597 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_INVERSE); in repaper_fb_dirty()
598 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_NORMAL); in repaper_fb_dirty()
601 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_COMPENSATE); in repaper_fb_dirty()
602 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_WHITE); in repaper_fb_dirty()
603 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_INVERSE); in repaper_fb_dirty()
604 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_NORMAL); in repaper_fb_dirty()
606 epd->cleared = true; in repaper_fb_dirty()
607 epd->partial = true; in repaper_fb_dirty()
610 memcpy(epd->current_frame, buf, fb->width * fb->height / 8); in repaper_fb_dirty()
616 if (epd->pre_border_byte) { in repaper_fb_dirty()
621 repaper_frame_data_repeat(epd, buf, in repaper_fb_dirty()
622 epd->current_frame, in repaper_fb_dirty()
636 static void power_off(struct repaper_epd *epd) in power_off() argument
639 gpiod_set_value_cansleep(epd->reset, 0); in power_off()
640 gpiod_set_value_cansleep(epd->panel_on, 0); in power_off()
641 if (epd->border) in power_off()
642 gpiod_set_value_cansleep(epd->border, 0); in power_off()
645 repaper_spi_mosi_low(epd->spi); in power_off()
648 gpiod_set_value_cansleep(epd->discharge, 1); in power_off()
650 gpiod_set_value_cansleep(epd->discharge, 0); in power_off()
657 struct repaper_epd *epd = drm_to_epd(pipe->crtc.dev); in repaper_pipe_enable() local
658 struct spi_device *spi = epd->spi; in repaper_pipe_enable()
669 gpiod_set_value_cansleep(epd->reset, 0); in repaper_pipe_enable()
670 gpiod_set_value_cansleep(epd->panel_on, 0); in repaper_pipe_enable()
671 gpiod_set_value_cansleep(epd->discharge, 0); in repaper_pipe_enable()
672 if (epd->border) in repaper_pipe_enable()
673 gpiod_set_value_cansleep(epd->border, 0); in repaper_pipe_enable()
677 gpiod_set_value_cansleep(epd->panel_on, 1); in repaper_pipe_enable()
683 gpiod_set_value_cansleep(epd->reset, 1); in repaper_pipe_enable()
684 if (epd->border) in repaper_pipe_enable()
685 gpiod_set_value_cansleep(epd->border, 1); in repaper_pipe_enable()
687 gpiod_set_value_cansleep(epd->reset, 0); in repaper_pipe_enable()
689 gpiod_set_value_cansleep(epd->reset, 1); in repaper_pipe_enable()
694 if (!gpiod_get_value_cansleep(epd->busy)) in repaper_pipe_enable()
702 power_off(epd); in repaper_pipe_enable()
713 power_off(epd); in repaper_pipe_enable()
726 power_off(epd); in repaper_pipe_enable()
733 repaper_write_buf(spi, 0x01, epd->channel_select, 8); in repaper_pipe_enable()
766 power_off(epd); in repaper_pipe_enable()
778 power_off(epd); in repaper_pipe_enable()
788 epd->enabled = true; in repaper_pipe_enable()
789 epd->partial = false; in repaper_pipe_enable()
796 struct repaper_epd *epd = drm_to_epd(pipe->crtc.dev); in repaper_pipe_disable() local
797 struct spi_device *spi = epd->spi; in repaper_pipe_disable()
807 if (!epd->enabled) in repaper_pipe_disable()
812 epd->enabled = false; in repaper_pipe_disable()
815 for (line = 0; line < epd->height; line++) in repaper_pipe_disable()
816 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL, in repaper_pipe_disable()
820 if (epd->border) { in repaper_pipe_disable()
822 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL, in repaper_pipe_disable()
825 gpiod_set_value_cansleep(epd->border, 0); in repaper_pipe_disable()
827 gpiod_set_value_cansleep(epd->border, 1); in repaper_pipe_disable()
830 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL, in repaper_pipe_disable()
852 power_off(epd); in repaper_pipe_disable()
882 struct repaper_epd *epd = drm_to_epd(connector->dev); in repaper_connector_get_modes() local
885 mode = drm_mode_duplicate(connector->dev, epd->mode); in repaper_connector_get_modes()
921 struct repaper_epd *epd = drm_to_epd(drm); in repaper_release() local
927 kfree(epd); in repaper_release()
1002 struct repaper_epd *epd; in repaper_probe() local
1024 epd = kzalloc(sizeof(*epd), GFP_KERNEL); in repaper_probe()
1025 if (!epd) in repaper_probe()
1028 drm = &epd->drm; in repaper_probe()
1032 kfree(epd); in repaper_probe()
1039 epd->spi = spi; in repaper_probe()
1041 epd->panel_on = devm_gpiod_get(dev, "panel-on", GPIOD_OUT_LOW); in repaper_probe()
1042 if (IS_ERR(epd->panel_on)) { in repaper_probe()
1043 ret = PTR_ERR(epd->panel_on); in repaper_probe()
1049 epd->discharge = devm_gpiod_get(dev, "discharge", GPIOD_OUT_LOW); in repaper_probe()
1050 if (IS_ERR(epd->discharge)) { in repaper_probe()
1051 ret = PTR_ERR(epd->discharge); in repaper_probe()
1057 epd->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); in repaper_probe()
1058 if (IS_ERR(epd->reset)) { in repaper_probe()
1059 ret = PTR_ERR(epd->reset); in repaper_probe()
1065 epd->busy = devm_gpiod_get(dev, "busy", GPIOD_IN); in repaper_probe()
1066 if (IS_ERR(epd->busy)) { in repaper_probe()
1067 ret = PTR_ERR(epd->busy); in repaper_probe()
1075 epd->thermal = thermal_zone_get_zone_by_name(thermal_zone); in repaper_probe()
1076 if (IS_ERR(epd->thermal)) { in repaper_probe()
1078 return PTR_ERR(epd->thermal); in repaper_probe()
1085 epd->channel_select = repaper_e1144cs021_cs; in repaper_probe()
1086 epd->stage_time = 480; in repaper_probe()
1087 epd->bytes_per_scan = 96 / 4; in repaper_probe()
1088 epd->middle_scan = true; /* data-scan-data */ in repaper_probe()
1089 epd->pre_border_byte = false; in repaper_probe()
1090 epd->border_byte = REPAPER_BORDER_BYTE_ZERO; in repaper_probe()
1095 epd->channel_select = repaper_e1190cs021_cs; in repaper_probe()
1096 epd->stage_time = 480; in repaper_probe()
1097 epd->bytes_per_scan = 128 / 4 / 2; in repaper_probe()
1098 epd->middle_scan = false; /* scan-data-scan */ in repaper_probe()
1099 epd->pre_border_byte = false; in repaper_probe()
1100 epd->border_byte = REPAPER_BORDER_BYTE_SET; in repaper_probe()
1105 epd->channel_select = repaper_e2200cs021_cs; in repaper_probe()
1106 epd->stage_time = 480; in repaper_probe()
1107 epd->bytes_per_scan = 96 / 4; in repaper_probe()
1108 epd->middle_scan = true; /* data-scan-data */ in repaper_probe()
1109 epd->pre_border_byte = true; in repaper_probe()
1110 epd->border_byte = REPAPER_BORDER_BYTE_NONE; in repaper_probe()
1114 epd->border = devm_gpiod_get(dev, "border", GPIOD_OUT_LOW); in repaper_probe()
1115 if (IS_ERR(epd->border)) { in repaper_probe()
1116 ret = PTR_ERR(epd->border); in repaper_probe()
1123 epd->channel_select = repaper_e2271cs021_cs; in repaper_probe()
1124 epd->stage_time = 630; in repaper_probe()
1125 epd->bytes_per_scan = 176 / 4; in repaper_probe()
1126 epd->middle_scan = true; /* data-scan-data */ in repaper_probe()
1127 epd->pre_border_byte = true; in repaper_probe()
1128 epd->border_byte = REPAPER_BORDER_BYTE_NONE; in repaper_probe()
1135 epd->mode = mode; in repaper_probe()
1136 epd->width = mode->hdisplay; in repaper_probe()
1137 epd->height = mode->vdisplay; in repaper_probe()
1138 epd->factored_stage_time = epd->stage_time; in repaper_probe()
1140 line_buffer_size = 2 * epd->width / 8 + epd->bytes_per_scan + 2; in repaper_probe()
1141 epd->line_buffer = devm_kzalloc(dev, line_buffer_size, GFP_KERNEL); in repaper_probe()
1142 if (!epd->line_buffer) in repaper_probe()
1145 epd->current_frame = devm_kzalloc(dev, epd->width * epd->height / 8, in repaper_probe()
1147 if (!epd->current_frame) in repaper_probe()
1155 drm_connector_helper_add(&epd->connector, &repaper_connector_hfuncs); in repaper_probe()
1156 ret = drm_connector_init(drm, &epd->connector, &repaper_connector_funcs, in repaper_probe()
1161 ret = drm_simple_display_pipe_init(drm, &epd->pipe, &repaper_pipe_funcs, in repaper_probe()
1163 NULL, &epd->connector); in repaper_probe()