Lines Matching defs:gm12u320
34 #define DRIVER_NAME "gm12u320"
51 DRM_DEV_ERROR(gm12u320->dev.dev, fmt, ##__VA_ARGS__)
162 static inline struct usb_device *gm12u320_to_usb_device(struct gm12u320_device *gm12u320)
164 return interface_to_usbdev(to_usb_interface(gm12u320->dev.dev));
167 static int gm12u320_usb_alloc(struct gm12u320_device *gm12u320)
172 gm12u320->cmd_buf = drmm_kmalloc(&gm12u320->dev, CMD_SIZE, GFP_KERNEL);
173 if (!gm12u320->cmd_buf)
185 gm12u320->data_buf[i] = drmm_kzalloc(&gm12u320->dev,
187 if (!gm12u320->data_buf[i])
190 memcpy(gm12u320->data_buf[i], hdr, DATA_BLOCK_HEADER_SIZE);
191 memcpy(gm12u320->data_buf[i] +
199 static int gm12u320_misc_request(struct gm12u320_device *gm12u320,
203 struct usb_device *udev = gm12u320_to_usb_device(gm12u320);
206 memcpy(gm12u320->cmd_buf, &cmd_misc, CMD_SIZE);
207 gm12u320->cmd_buf[20] = req_a;
208 gm12u320->cmd_buf[21] = req_b;
209 gm12u320->cmd_buf[22] = arg_a;
210 gm12u320->cmd_buf[23] = arg_b;
211 gm12u320->cmd_buf[24] = arg_c;
212 gm12u320->cmd_buf[25] = arg_d;
216 gm12u320->cmd_buf, CMD_SIZE, &len, CMD_TIMEOUT);
224 gm12u320->cmd_buf, MISC_VALUE_SIZE, &len,
234 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
254 static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320)
261 mutex_lock(&gm12u320->fb_update.lock);
263 if (!gm12u320->fb_update.fb)
266 fb = gm12u320->fb_update.fb;
267 x1 = gm12u320->fb_update.rect.x1;
268 x2 = gm12u320->fb_update.rect.x2;
269 y1 = gm12u320->fb_update.rect.y1;
270 y2 = gm12u320->fb_update.rect.y2;
271 vaddr = gm12u320->fb_update.src_map.vaddr; /* TODO: Use mapping abstraction properly */
300 gm12u320->data_buf[block] + dst_offset,
307 gm12u320->data_buf[block] + dst_offset,
316 gm12u320->fb_update.fb = NULL;
318 mutex_unlock(&gm12u320->fb_update.lock);
323 struct gm12u320_device *gm12u320 =
326 struct usb_device *udev = gm12u320_to_usb_device(gm12u320);
330 gm12u320_copy_fb_to_blocks(gm12u320);
339 memcpy(gm12u320->cmd_buf, cmd_data, CMD_SIZE);
340 gm12u320->cmd_buf[8] = block_size & 0xff;
341 gm12u320->cmd_buf[9] = block_size >> 8;
342 gm12u320->cmd_buf[20] = 0xfc - block * 4;
343 gm12u320->cmd_buf[21] =
344 block | (gm12u320->fb_update.frame << 7);
348 gm12u320->cmd_buf, CMD_SIZE, &len,
356 gm12u320->data_buf[block], block_size,
364 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
371 memcpy(gm12u320->cmd_buf, cmd_draw, CMD_SIZE);
373 gm12u320->cmd_buf, CMD_SIZE, &len, CMD_TIMEOUT);
379 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
380 gm12u320->fb_update.draw_status_timeout);
384 gm12u320->fb_update.draw_status_timeout = CMD_TIMEOUT;
385 gm12u320->fb_update.frame = !gm12u320->fb_update.frame;
391 queue_delayed_work(system_long_wq, &gm12u320->fb_update.work,
405 struct gm12u320_device *gm12u320 = to_gm12u320(fb->dev);
409 mutex_lock(&gm12u320->fb_update.lock);
411 if (gm12u320->fb_update.fb != fb) {
412 old_fb = gm12u320->fb_update.fb;
414 gm12u320->fb_update.fb = fb;
415 gm12u320->fb_update.rect = *dirty;
416 gm12u320->fb_update.src_map = *map;
419 struct drm_rect *rect = &gm12u320->fb_update.rect;
427 mutex_unlock(&gm12u320->fb_update.lock);
430 mod_delayed_work(system_long_wq, &gm12u320->fb_update.work, 0);
436 static void gm12u320_stop_fb_update(struct gm12u320_device *gm12u320)
440 cancel_delayed_work_sync(&gm12u320->fb_update.work);
442 mutex_lock(&gm12u320->fb_update.lock);
443 old_fb = gm12u320->fb_update.fb;
444 gm12u320->fb_update.fb = NULL;
445 iosys_map_clear(&gm12u320->fb_update.src_map);
446 mutex_unlock(&gm12u320->fb_update.lock);
451 static int gm12u320_set_ecomode(struct gm12u320_device *gm12u320)
453 return gm12u320_misc_request(gm12u320, MISC_REQ_GET_SET_ECO_A,
459 /* gm12u320 connector */
542 static int gm12u320_conn_init(struct gm12u320_device *gm12u320)
544 drm_connector_helper_add(&gm12u320->conn, &gm12u320_conn_helper_funcs);
545 return drm_connector_init(&gm12u320->dev, &gm12u320->conn,
550 /* gm12u320 (simple) display pipe */
557 struct gm12u320_device *gm12u320 = to_gm12u320(pipe->crtc.dev);
560 gm12u320->fb_update.draw_status_timeout = FIRST_FRAME_TIMEOUT;
566 struct gm12u320_device *gm12u320 = to_gm12u320(pipe->crtc.dev);
568 gm12u320_stop_fb_update(gm12u320);
606 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
608 if (!gm12u320->dmadev)
611 return drm_gem_prime_import_dev(dev, dma_buf, gm12u320->dmadev);
639 struct gm12u320_device *gm12u320;
644 * The gm12u320 presents itself to the system as 2 usb mass-storage
650 gm12u320 = devm_drm_dev_alloc(&interface->dev, &gm12u320_drm_driver,
652 if (IS_ERR(gm12u320))
653 return PTR_ERR(gm12u320);
654 dev = &gm12u320->dev;
656 gm12u320->dmadev = usb_intf_get_dma_device(to_usb_interface(dev->dev));
657 if (!gm12u320->dmadev)
660 INIT_DELAYED_WORK(&gm12u320->fb_update.work, gm12u320_fb_update_work);
661 mutex_init(&gm12u320->fb_update.lock);
673 ret = gm12u320_usb_alloc(gm12u320);
677 ret = gm12u320_set_ecomode(gm12u320);
681 ret = gm12u320_conn_init(gm12u320);
685 ret = drm_simple_display_pipe_init(&gm12u320->dev,
686 &gm12u320->pipe,
691 &gm12u320->conn);
707 put_device(gm12u320->dmadev);
714 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
716 put_device(gm12u320->dmadev);
717 gm12u320->dmadev = NULL;
733 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
735 gm12u320_set_ecomode(gm12u320);
747 .name = "gm12u320",