Lines Matching +full:output +full:- +full:pixel +full:- +full:format

2  * Copyright 2019-24, NXP
5 * SPDX-License-Identifier: Apache-2.0
68 k_sem_give(&data->pxp_done); in mcux_elcdif_pxp_callback()
75 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_write()
76 struct mcux_elcdif_data *dev_data = dev->data; in mcux_elcdif_write()
83 __ASSERT((dev_data->pixel_bytes * desc->pitch * desc->height) <= desc->buf_size, in mcux_elcdif_write()
86 LOG_DBG("W=%d, H=%d, @%d,%d", desc->width, desc->height, x, y); in mcux_elcdif_write()
88 if ((x == 0) && (y == 0) && (desc->width == config->rgb_mode.panelWidth) && in mcux_elcdif_write()
89 (desc->height == config->rgb_mode.panelHeight) && (desc->pitch == desc->width)) { in mcux_elcdif_write()
91 LOG_DBG("Setting FB from %p->%p", (void *)dev_data->active_fb, (void *)buf); in mcux_elcdif_write()
92 dev_data->active_fb = buf; in mcux_elcdif_write()
94 } else if ((x == 0) && (y == 0) && (desc->width == config->rgb_mode.panelHeight) && in mcux_elcdif_write()
95 (desc->height == config->rgb_mode.panelWidth) && (desc->pitch == desc->width) && in mcux_elcdif_write()
98 * with output dimensions in mcux_elcdif_write()
100 LOG_DBG("Setting FB from %p->%p", (void *)dev_data->active_fb, (void *)buf); in mcux_elcdif_write()
101 dev_data->active_fb = buf; in mcux_elcdif_write()
107 return -ENOTSUP; in mcux_elcdif_write()
108 } else if (dev_data->active_fb != dev_data->fb[dev_data->next_idx]) { in mcux_elcdif_write()
114 src = dev_data->active_fb; in mcux_elcdif_write()
115 dst = dev_data->fb[dev_data->next_idx]; in mcux_elcdif_write()
116 memcpy(dst, src, dev_data->fb_bytes); in mcux_elcdif_write()
120 dst = dev_data->fb[dev_data->next_idx]; in mcux_elcdif_write()
121 dst += dev_data->pixel_bytes * (y * config->rgb_mode.panelWidth + x); in mcux_elcdif_write()
123 for (h_idx = 0; h_idx < desc->height; h_idx++) { in mcux_elcdif_write()
124 memcpy(dst, src, dev_data->pixel_bytes * desc->width); in mcux_elcdif_write()
125 src += dev_data->pixel_bytes * desc->pitch; in mcux_elcdif_write()
126 dst += dev_data->pixel_bytes * config->rgb_mode.panelWidth; in mcux_elcdif_write()
129 LOG_DBG("Setting FB from %p->%p", (void *)dev_data->active_fb, in mcux_elcdif_write()
130 (void *)dev_data->fb[dev_data->next_idx]); in mcux_elcdif_write()
132 dev_data->active_fb = dev_data->fb[dev_data->next_idx]; in mcux_elcdif_write()
136 DCACHE_CleanByRange((uint32_t)dev_data->active_fb, dev_data->fb_bytes); in mcux_elcdif_write()
146 * place modified output into a driver framebuffer. in mcux_elcdif_write()
148 dev_data->active_fb = dev_data->fb[dev_data->next_idx]; in mcux_elcdif_write()
150 pxp_block.dest_address = (uint32_t)dev_data->active_fb; in mcux_elcdif_write()
151 pxp_block.block_size = desc->buf_size; in mcux_elcdif_write()
153 /* DMA slot sets pixel format and rotation angle */ in mcux_elcdif_write()
154 if (dev_data->pixel_format == PIXEL_FORMAT_BGR_565) { in mcux_elcdif_write()
156 } else if (dev_data->pixel_format == PIXEL_FORMAT_RGB_888) { in mcux_elcdif_write()
158 } else if (dev_data->pixel_format == PIXEL_FORMAT_ARGB_8888) { in mcux_elcdif_write()
162 return -ENOTSUP; in mcux_elcdif_write()
186 pxp_dma.source_data_size = desc->width * dev_data->pixel_bytes; in mcux_elcdif_write()
187 pxp_dma.dest_data_size = config->rgb_mode.panelWidth * dev_data->pixel_bytes; in mcux_elcdif_write()
189 pxp_dma.source_burst_length = desc->height; in mcux_elcdif_write()
190 pxp_dma.dest_burst_length = config->rgb_mode.panelHeight; in mcux_elcdif_write()
195 ret = dma_config(config->pxp, 0, &pxp_dma); in mcux_elcdif_write()
199 ret = dma_start(config->pxp, 0); in mcux_elcdif_write()
203 k_sem_take(&dev_data->pxp_done, K_FOREVER); in mcux_elcdif_write()
211 ELCDIF_SetNextBufferAddr(config->base, (uint32_t)dev_data->active_fb); in mcux_elcdif_write()
215 dev_data->next_idx = (dev_data->next_idx + 1) % CONFIG_MCUX_ELCDIF_FB_NUM; in mcux_elcdif_write()
218 ELCDIF_EnableInterrupts(config->base, kELCDIF_CurFrameDoneInterruptEnable); in mcux_elcdif_write()
220 k_sem_take(&dev_data->sem, K_FOREVER); in mcux_elcdif_write()
226 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_display_blanking_off()
228 return gpio_pin_set_dt(&config->backlight_gpio, 1); in mcux_elcdif_display_blanking_off()
233 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_display_blanking_on()
235 return gpio_pin_set_dt(&config->backlight_gpio, 0); in mcux_elcdif_display_blanking_on()
241 struct mcux_elcdif_data *dev_data = dev->data; in mcux_elcdif_set_pixel_format()
242 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_set_pixel_format()
245 LOG_ERR("Unsupported pixel format"); in mcux_elcdif_set_pixel_format()
246 return -ENOTSUP; in mcux_elcdif_set_pixel_format()
249 dev_data->pixel_format = pixel_format; in mcux_elcdif_set_pixel_format()
250 dev_data->pixel_bytes = DISPLAY_BITS_PER_PIXEL(pixel_format) / BITS_PER_BYTE; in mcux_elcdif_set_pixel_format()
251 dev_data->fb_bytes = in mcux_elcdif_set_pixel_format()
252 config->rgb_mode.panelWidth * config->rgb_mode.panelHeight * dev_data->pixel_bytes; in mcux_elcdif_set_pixel_format()
255 k_heap_free(&display_heap, dev_data->fb[i]); in mcux_elcdif_set_pixel_format()
256 dev_data->fb[i] = in mcux_elcdif_set_pixel_format()
257 k_heap_aligned_alloc(&display_heap, 64, dev_data->fb_bytes, K_FOREVER); in mcux_elcdif_set_pixel_format()
258 if (dev_data->fb[i] == NULL) { in mcux_elcdif_set_pixel_format()
260 return -ENOMEM; in mcux_elcdif_set_pixel_format()
262 memset(dev_data->fb[i], 0, dev_data->fb_bytes); in mcux_elcdif_set_pixel_format()
265 dev_data->rgb_mode = config->rgb_mode; in mcux_elcdif_set_pixel_format()
267 dev_data->rgb_mode.pixelFormat = kELCDIF_PixelFormatRGB565; in mcux_elcdif_set_pixel_format()
269 dev_data->rgb_mode.pixelFormat = kELCDIF_PixelFormatRGB888; in mcux_elcdif_set_pixel_format()
271 dev_data->rgb_mode.pixelFormat = kELCDIF_PixelFormatXRGB8888; in mcux_elcdif_set_pixel_format()
274 ELCDIF_RgbModeSetPixelFormat(config->base, dev_data->rgb_mode.pixelFormat); in mcux_elcdif_set_pixel_format()
286 return -ENOTSUP; in mcux_elcdif_set_orientation()
292 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_get_capabilities()
295 capabilities->x_resolution = config->rgb_mode.panelWidth; in mcux_elcdif_get_capabilities()
296 capabilities->y_resolution = config->rgb_mode.panelHeight; in mcux_elcdif_get_capabilities()
297 capabilities->supported_pixel_formats = supported_fmts; in mcux_elcdif_get_capabilities()
298 capabilities->current_pixel_format = ((struct mcux_elcdif_data *)dev->data)->pixel_format; in mcux_elcdif_get_capabilities()
299 capabilities->current_orientation = DISPLAY_ORIENTATION_NORMAL; in mcux_elcdif_get_capabilities()
304 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_isr()
305 struct mcux_elcdif_data *dev_data = dev->data; in mcux_elcdif_isr()
308 status = ELCDIF_GetInterruptStatus(config->base); in mcux_elcdif_isr()
309 ELCDIF_ClearInterruptStatus(config->base, status); in mcux_elcdif_isr()
310 if (config->base->CUR_BUF == ((uint32_t)dev_data->active_fb)) { in mcux_elcdif_isr()
314 ELCDIF_DisableInterrupts(config->base, kELCDIF_CurFrameDoneInterruptEnable); in mcux_elcdif_isr()
315 k_sem_give(&dev_data->sem); in mcux_elcdif_isr()
321 const struct mcux_elcdif_config *config = dev->config; in mcux_elcdif_init()
322 struct mcux_elcdif_data *dev_data = dev->data; in mcux_elcdif_init()
325 err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT); in mcux_elcdif_init()
330 err = gpio_pin_configure_dt(&config->backlight_gpio, GPIO_OUTPUT_ACTIVE); in mcux_elcdif_init()
335 k_sem_init(&dev_data->sem, 0, 1); in mcux_elcdif_init()
337 k_sem_init(&dev_data->pxp_done, 0, 1); in mcux_elcdif_init()
338 if (!device_is_ready(config->pxp)) { in mcux_elcdif_init()
340 return -ENODEV; in mcux_elcdif_init()
344 config->irq_config_func(dev); in mcux_elcdif_init()
346 /* Set default pixel format obtained from device tree */ in mcux_elcdif_init()
347 mcux_elcdif_set_pixel_format(dev, dev_data->pixel_format); in mcux_elcdif_init()
349 dev_data->active_fb = dev_data->fb[0]; in mcux_elcdif_init()
351 ELCDIF_RgbModeInit(config->base, &dev_data->rgb_mode); in mcux_elcdif_init()
352 ELCDIF_RgbModeStart(config->base); in mcux_elcdif_init()