Lines Matching defs:gm12u320

31 #define DRIVER_NAME		"gm12u320"
48 DRM_DEV_ERROR(&gm12u320->udev->dev, fmt, ##__VA_ARGS__)
159 static int gm12u320_usb_alloc(struct gm12u320_device *gm12u320)
164 gm12u320->cmd_buf = drmm_kmalloc(&gm12u320->dev, CMD_SIZE, GFP_KERNEL);
165 if (!gm12u320->cmd_buf)
177 gm12u320->data_buf[i] = drmm_kzalloc(&gm12u320->dev,
179 if (!gm12u320->data_buf[i])
182 memcpy(gm12u320->data_buf[i], hdr, DATA_BLOCK_HEADER_SIZE);
183 memcpy(gm12u320->data_buf[i] +
191 static int gm12u320_misc_request(struct gm12u320_device *gm12u320,
197 memcpy(gm12u320->cmd_buf, &cmd_misc, CMD_SIZE);
198 gm12u320->cmd_buf[20] = req_a;
199 gm12u320->cmd_buf[21] = req_b;
200 gm12u320->cmd_buf[22] = arg_a;
201 gm12u320->cmd_buf[23] = arg_b;
202 gm12u320->cmd_buf[24] = arg_c;
203 gm12u320->cmd_buf[25] = arg_d;
206 ret = usb_bulk_msg(gm12u320->udev,
207 usb_sndbulkpipe(gm12u320->udev, MISC_SND_EPT),
208 gm12u320->cmd_buf, CMD_SIZE, &len, CMD_TIMEOUT);
215 ret = usb_bulk_msg(gm12u320->udev,
216 usb_rcvbulkpipe(gm12u320->udev, MISC_RCV_EPT),
217 gm12u320->cmd_buf, MISC_VALUE_SIZE, &len,
226 ret = usb_bulk_msg(gm12u320->udev,
227 usb_rcvbulkpipe(gm12u320->udev, MISC_RCV_EPT),
228 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
248 static void gm12u320_copy_fb_to_blocks(struct gm12u320_device *gm12u320)
255 mutex_lock(&gm12u320->fb_update.lock);
257 if (!gm12u320->fb_update.fb)
260 fb = gm12u320->fb_update.fb;
261 x1 = gm12u320->fb_update.rect.x1;
262 x2 = gm12u320->fb_update.rect.x2;
263 y1 = gm12u320->fb_update.rect.y1;
264 y2 = gm12u320->fb_update.rect.y2;
302 gm12u320->data_buf[block] + dst_offset,
309 gm12u320->data_buf[block] + dst_offset,
325 gm12u320->fb_update.fb = NULL;
327 mutex_unlock(&gm12u320->fb_update.lock);
332 struct gm12u320_device *gm12u320 =
338 gm12u320_copy_fb_to_blocks(gm12u320);
347 memcpy(gm12u320->cmd_buf, cmd_data, CMD_SIZE);
348 gm12u320->cmd_buf[8] = block_size & 0xff;
349 gm12u320->cmd_buf[9] = block_size >> 8;
350 gm12u320->cmd_buf[20] = 0xfc - block * 4;
351 gm12u320->cmd_buf[21] =
352 block | (gm12u320->fb_update.frame << 7);
354 ret = usb_bulk_msg(gm12u320->udev,
355 usb_sndbulkpipe(gm12u320->udev, DATA_SND_EPT),
356 gm12u320->cmd_buf, CMD_SIZE, &len,
362 ret = usb_bulk_msg(gm12u320->udev,
363 usb_sndbulkpipe(gm12u320->udev, DATA_SND_EPT),
364 gm12u320->data_buf[block], block_size,
370 ret = usb_bulk_msg(gm12u320->udev,
371 usb_rcvbulkpipe(gm12u320->udev, DATA_RCV_EPT),
372 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
379 memcpy(gm12u320->cmd_buf, cmd_draw, CMD_SIZE);
380 ret = usb_bulk_msg(gm12u320->udev,
381 usb_sndbulkpipe(gm12u320->udev, DATA_SND_EPT),
382 gm12u320->cmd_buf, CMD_SIZE, &len, CMD_TIMEOUT);
387 ret = usb_bulk_msg(gm12u320->udev,
388 usb_rcvbulkpipe(gm12u320->udev, DATA_RCV_EPT),
389 gm12u320->cmd_buf, READ_STATUS_SIZE, &len,
390 gm12u320->fb_update.draw_status_timeout);
394 gm12u320->fb_update.draw_status_timeout = CMD_TIMEOUT;
395 gm12u320->fb_update.frame = !gm12u320->fb_update.frame;
401 queue_delayed_work(system_long_wq, &gm12u320->fb_update.work,
414 struct gm12u320_device *gm12u320 = to_gm12u320(fb->dev);
418 mutex_lock(&gm12u320->fb_update.lock);
420 if (gm12u320->fb_update.fb != fb) {
421 old_fb = gm12u320->fb_update.fb;
423 gm12u320->fb_update.fb = fb;
424 gm12u320->fb_update.rect = *dirty;
427 struct drm_rect *rect = &gm12u320->fb_update.rect;
435 mutex_unlock(&gm12u320->fb_update.lock);
438 mod_delayed_work(system_long_wq, &gm12u320->fb_update.work, 0);
444 static void gm12u320_stop_fb_update(struct gm12u320_device *gm12u320)
448 cancel_delayed_work_sync(&gm12u320->fb_update.work);
450 mutex_lock(&gm12u320->fb_update.lock);
451 old_fb = gm12u320->fb_update.fb;
452 gm12u320->fb_update.fb = NULL;
453 mutex_unlock(&gm12u320->fb_update.lock);
458 static int gm12u320_set_ecomode(struct gm12u320_device *gm12u320)
460 return gm12u320_misc_request(gm12u320, MISC_REQ_GET_SET_ECO_A,
466 /* gm12u320 connector */
549 static int gm12u320_conn_init(struct gm12u320_device *gm12u320)
551 drm_connector_helper_add(&gm12u320->conn, &gm12u320_conn_helper_funcs);
552 return drm_connector_init(&gm12u320->dev, &gm12u320->conn,
557 /* gm12u320 (simple) display pipe */
564 struct gm12u320_device *gm12u320 = to_gm12u320(pipe->crtc.dev);
566 gm12u320->fb_update.draw_status_timeout = FIRST_FRAME_TIMEOUT;
572 struct gm12u320_device *gm12u320 = to_gm12u320(pipe->crtc.dev);
574 gm12u320_stop_fb_update(gm12u320);
610 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
612 if (!gm12u320->dmadev)
615 return drm_gem_prime_import_dev(dev, dma_buf, gm12u320->dmadev);
643 struct gm12u320_device *gm12u320;
648 * The gm12u320 presents itself to the system as 2 usb mass-storage
654 gm12u320 = devm_drm_dev_alloc(&interface->dev, &gm12u320_drm_driver,
656 if (IS_ERR(gm12u320))
657 return PTR_ERR(gm12u320);
658 dev = &gm12u320->dev;
660 gm12u320->dmadev = usb_intf_get_dma_device(to_usb_interface(dev->dev));
661 if (!gm12u320->dmadev)
664 gm12u320->udev = interface_to_usbdev(interface);
665 INIT_DELAYED_WORK(&gm12u320->fb_update.work, gm12u320_fb_update_work);
666 mutex_init(&gm12u320->fb_update.lock);
678 ret = gm12u320_usb_alloc(gm12u320);
682 ret = gm12u320_set_ecomode(gm12u320);
686 ret = gm12u320_conn_init(gm12u320);
690 ret = drm_simple_display_pipe_init(&gm12u320->dev,
691 &gm12u320->pipe,
696 &gm12u320->conn);
712 put_device(gm12u320->dmadev);
719 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
721 put_device(gm12u320->dmadev);
722 gm12u320->dmadev = NULL;
738 struct gm12u320_device *gm12u320 = to_gm12u320(dev);
740 gm12u320_set_ecomode(gm12u320);
752 .name = "gm12u320",