Lines Matching defs:epd

200 static void repaper_even_pixels(struct repaper_epd *epd, u8 **pp,
206 for (b = 0; b < (epd->width / 8); b++) {
246 static void repaper_odd_pixels(struct repaper_epd *epd, u8 **pp,
252 for (b = epd->width / 8; b > 0; b--) {
296 static void repaper_all_pixels(struct repaper_epd *epd, u8 **pp,
302 for (b = epd->width / 8; b > 0; b--) {
340 static void repaper_one_line(struct repaper_epd *epd, unsigned int line,
344 u8 *p = epd->line_buffer;
347 repaper_spi_mosi_low(epd->spi);
349 if (epd->pre_border_byte)
352 if (epd->middle_scan) {
354 repaper_odd_pixels(epd, &p, data, fixed_value, mask, stage);
357 for (b = epd->bytes_per_scan; b > 0; b--) {
365 repaper_even_pixels(epd, &p, data, fixed_value, mask, stage);
371 for (b = 0; b < epd->bytes_per_scan; b++) {
379 repaper_all_pixels(epd, &p, data, fixed_value, mask, stage);
385 for (b = epd->bytes_per_scan; b > 0; b--) {
393 switch (epd->border_byte) {
415 repaper_write_buf(epd->spi, 0x0a, epd->line_buffer,
416 p - epd->line_buffer);
419 repaper_write_val(epd->spi, 0x02, 0x07);
421 repaper_spi_mosi_low(epd->spi);
424 static void repaper_frame_fixed(struct repaper_epd *epd, u8 fixed_value,
429 for (line = 0; line < epd->height; line++)
430 repaper_one_line(epd, line, NULL, fixed_value, NULL, stage);
433 static void repaper_frame_data(struct repaper_epd *epd, const u8 *image,
439 for (line = 0; line < epd->height; line++) {
440 repaper_one_line(epd, line,
441 &image[line * (epd->width / 8)],
445 for (line = 0; line < epd->height; line++) {
446 size_t n = line * epd->width / 8;
448 repaper_one_line(epd, line, &image[n], 0, &mask[n],
454 static void repaper_frame_fixed_repeat(struct repaper_epd *epd, u8 fixed_value,
458 u64 end = start + (epd->factored_stage_time * 1000 * 1000);
461 repaper_frame_fixed(epd, fixed_value, stage);
465 static void repaper_frame_data_repeat(struct repaper_epd *epd, const u8 *image,
469 u64 end = start + (epd->factored_stage_time * 1000 * 1000);
472 repaper_frame_data(epd, image, mask, stage);
476 static void repaper_get_temperature(struct repaper_epd *epd)
481 if (!epd->thermal)
484 ret = thermal_zone_get_temp(epd->thermal, &temperature);
486 DRM_DEV_ERROR(&epd->spi->dev, "Failed to get temperature (%d)\n", ret);
509 epd->factored_stage_time = epd->stage_time * factor10x / 10;
516 struct repaper_epd *epd = drm_to_epd(fb->dev);
532 repaper_get_temperature(epd);
535 epd->factored_stage_time);
553 if (epd->partial) {
554 repaper_frame_data_repeat(epd, buf, epd->current_frame,
556 } else if (epd->cleared) {
557 repaper_frame_data_repeat(epd, epd->current_frame, NULL,
559 repaper_frame_data_repeat(epd, epd->current_frame, NULL,
561 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_INVERSE);
562 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_NORMAL);
564 epd->partial = true;
567 repaper_frame_fixed_repeat(epd, 0xff, REPAPER_COMPENSATE);
568 repaper_frame_fixed_repeat(epd, 0xff, REPAPER_WHITE);
569 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_INVERSE);
570 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_NORMAL);
573 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_COMPENSATE);
574 repaper_frame_fixed_repeat(epd, 0xaa, REPAPER_WHITE);
575 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_INVERSE);
576 repaper_frame_data_repeat(epd, buf, NULL, REPAPER_NORMAL);
578 epd->cleared = true;
579 epd->partial = true;
582 memcpy(epd->current_frame, buf, fb->width * fb->height / 8);
588 if (epd->pre_border_byte) {
593 repaper_frame_data_repeat(epd, buf,
594 epd->current_frame,
608 static void power_off(struct repaper_epd *epd)
611 gpiod_set_value_cansleep(epd->reset, 0);
612 gpiod_set_value_cansleep(epd->panel_on, 0);
613 if (epd->border)
614 gpiod_set_value_cansleep(epd->border, 0);
617 repaper_spi_mosi_low(epd->spi);
620 gpiod_set_value_cansleep(epd->discharge, 1);
622 gpiod_set_value_cansleep(epd->discharge, 0);
629 struct repaper_epd *epd = drm_to_epd(crtc->dev);
631 return drm_crtc_helper_mode_valid_fixed(crtc, mode, epd->mode);
638 struct repaper_epd *epd = drm_to_epd(pipe->crtc.dev);
639 struct spi_device *spi = epd->spi;
650 gpiod_set_value_cansleep(epd->reset, 0);
651 gpiod_set_value_cansleep(epd->panel_on, 0);
652 gpiod_set_value_cansleep(epd->discharge, 0);
653 if (epd->border)
654 gpiod_set_value_cansleep(epd->border, 0);
658 gpiod_set_value_cansleep(epd->panel_on, 1);
664 gpiod_set_value_cansleep(epd->reset, 1);
665 if (epd->border)
666 gpiod_set_value_cansleep(epd->border, 1);
668 gpiod_set_value_cansleep(epd->reset, 0);
670 gpiod_set_value_cansleep(epd->reset, 1);
675 if (!gpiod_get_value_cansleep(epd->busy))
683 power_off(epd);
694 power_off(epd);
707 power_off(epd);
714 repaper_write_buf(spi, 0x01, epd->channel_select, 8);
747 power_off(epd);
759 power_off(epd);
769 epd->partial = false;
776 struct repaper_epd *epd = drm_to_epd(pipe->crtc.dev);
777 struct spi_device *spi = epd->spi;
790 for (line = 0; line < epd->height; line++)
791 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL,
795 if (epd->border) {
797 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL,
800 gpiod_set_value_cansleep(epd->border, 0);
802 gpiod_set_value_cansleep(epd->border, 1);
805 repaper_one_line(epd, 0x7fffu, NULL, 0x00, NULL,
827 power_off(epd);
855 struct repaper_epd *epd = drm_to_epd(connector->dev);
857 return drm_connector_helper_get_modes_fixed(connector, epd->mode);
948 struct repaper_epd *epd;
971 epd = devm_drm_dev_alloc(dev, &repaper_driver,
973 if (IS_ERR(epd))
974 return PTR_ERR(epd);
976 drm = &epd->drm;
983 epd->spi = spi;
985 epd->panel_on = devm_gpiod_get(dev, "panel-on", GPIOD_OUT_LOW);
986 if (IS_ERR(epd->panel_on)) {
987 ret = PTR_ERR(epd->panel_on);
993 epd->discharge = devm_gpiod_get(dev, "discharge", GPIOD_OUT_LOW);
994 if (IS_ERR(epd->discharge)) {
995 ret = PTR_ERR(epd->discharge);
1001 epd->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
1002 if (IS_ERR(epd->reset)) {
1003 ret = PTR_ERR(epd->reset);
1009 epd->busy = devm_gpiod_get(dev, "busy", GPIOD_IN);
1010 if (IS_ERR(epd->busy)) {
1011 ret = PTR_ERR(epd->busy);
1019 epd->thermal = thermal_zone_get_zone_by_name(thermal_zone);
1020 if (IS_ERR(epd->thermal)) {
1022 return PTR_ERR(epd->thermal);
1029 epd->channel_select = repaper_e1144cs021_cs;
1030 epd->stage_time = 480;
1031 epd->bytes_per_scan = 96 / 4;
1032 epd->middle_scan = true; /* data-scan-data */
1033 epd->pre_border_byte = false;
1034 epd->border_byte = REPAPER_BORDER_BYTE_ZERO;
1039 epd->channel_select = repaper_e1190cs021_cs;
1040 epd->stage_time = 480;
1041 epd->bytes_per_scan = 128 / 4 / 2;
1042 epd->middle_scan = false; /* scan-data-scan */
1043 epd->pre_border_byte = false;
1044 epd->border_byte = REPAPER_BORDER_BYTE_SET;
1049 epd->channel_select = repaper_e2200cs021_cs;
1050 epd->stage_time = 480;
1051 epd->bytes_per_scan = 96 / 4;
1052 epd->middle_scan = true; /* data-scan-data */
1053 epd->pre_border_byte = true;
1054 epd->border_byte = REPAPER_BORDER_BYTE_NONE;
1058 epd->border = devm_gpiod_get(dev, "border", GPIOD_OUT_LOW);
1059 if (IS_ERR(epd->border)) {
1060 ret = PTR_ERR(epd->border);
1067 epd->channel_select = repaper_e2271cs021_cs;
1068 epd->stage_time = 630;
1069 epd->bytes_per_scan = 176 / 4;
1070 epd->middle_scan = true; /* data-scan-data */
1071 epd->pre_border_byte = true;
1072 epd->border_byte = REPAPER_BORDER_BYTE_NONE;
1079 epd->mode = mode;
1080 epd->width = mode->hdisplay;
1081 epd->height = mode->vdisplay;
1082 epd->factored_stage_time = epd->stage_time;
1084 line_buffer_size = 2 * epd->width / 8 + epd->bytes_per_scan + 2;
1085 epd->line_buffer = devm_kzalloc(dev, line_buffer_size, GFP_KERNEL);
1086 if (!epd->line_buffer)
1089 epd->current_frame = devm_kzalloc(dev, epd->width * epd->height / 8,
1091 if (!epd->current_frame)
1099 drm_connector_helper_add(&epd->connector, &repaper_connector_hfuncs);
1100 ret = drm_connector_init(drm, &epd->connector, &repaper_connector_funcs,
1105 ret = drm_simple_display_pipe_init(drm, &epd->pipe, &repaper_pipe_funcs,
1107 NULL, &epd->connector);