Lines Matching refs:hdcp

85 static void dw_hdcp_free_hl(struct dw_hdcp *hdcp)  in dw_hdcp_free_hl()  argument
87 dw_hdcp_free_hl_dev_slot(&hdcp->hl_dev); in dw_hdcp_free_hl()
88 hdcp->hl_dev.code_loaded = false; in dw_hdcp_free_hl()
91 static void dw_hdcp_reset(struct dw_hdcp *hdcp) in dw_hdcp_reset() argument
95 reset_control_assert(hdcp->rsts_bulk); in dw_hdcp_reset()
97 reset_control_deassert(hdcp->rsts_bulk); in dw_hdcp_reset()
99 ret = sip_hdcpkey_init(hdcp->id); in dw_hdcp_reset()
101 dev_err(hdcp->dev, "load hdcp key failed\n"); in dw_hdcp_reset()
104 static int dw_hdcp_set_reset(struct dw_hdcp *hdcp, void __user *arg) in dw_hdcp_set_reset() argument
115 dev_info(hdcp->dev, "hdcp reset\n"); in dw_hdcp_set_reset()
116 dw_hdcp_free_hl(hdcp); in dw_hdcp_set_reset()
117 dw_hdcp_reset(hdcp); in dw_hdcp_set_reset()
123 static int dw_hdcp_get_status(struct dw_hdcp *hdcp, void __user *arg) in dw_hdcp_get_status() argument
133 if (!hdcp->is_suspend) { in dw_hdcp_get_status()
134 if (hdcp->id) { in dw_hdcp_get_status()
135 regmap_read(hdcp->vo_grf, VO1_GRF_VO1_STS3, &val); in dw_hdcp_get_status()
141 regmap_read(hdcp->vo_grf, VO1_GRF_VO1_STS4, &val); in dw_hdcp_get_status()
147 regmap_read(hdcp->vo_grf, VO0_GRF_VO0_STS0, &val); in dw_hdcp_get_status()
153 regmap_read(hdcp->vo_grf, VO0_GRF_VO0_STS3, &val); in dw_hdcp_get_status()
333 struct dw_hdcp *hdcp = container_of(hl_dev, struct dw_hdcp, hl_dev); in dw_hdcp_free_dma_areas() local
336 dma_free_coherent(hdcp->dev, hl_dev->code_size, hl_dev->code, hl_dev->code_base); in dw_hdcp_free_dma_areas()
341 dma_free_coherent(hdcp->dev, hl_dev->data_size, hl_dev->data, hl_dev->data_base); in dw_hdcp_free_dma_areas()
348 struct dw_hdcp *hdcp = container_of(hl_dev, struct dw_hdcp, hl_dev); in dw_hdcp_alloc_dma_areas() local
357 dev_err(hdcp->dev, "hdcp don't support phys mem\n"); in dw_hdcp_alloc_dma_areas()
361 hl_dev->code = dma_alloc_coherent(hdcp->dev, hl_dev->code_size, in dw_hdcp_alloc_dma_areas()
366 hl_dev->data = dma_alloc_coherent(hdcp->dev, hl_dev->data_size, in dw_hdcp_alloc_dma_areas()
420 struct dw_hdcp *hdcp; in dw_hdcp_hld_ioctl() local
428 hdcp = container_of(misc_dev, struct dw_hdcp, misc_dev); in dw_hdcp_hld_ioctl()
429 hl_dev = &hdcp->hl_dev; in dw_hdcp_hld_ioctl()
452 return dw_hdcp_get_status(hdcp, data); in dw_hdcp_hld_ioctl()
454 return dw_hdcp_set_reset(hdcp, data); in dw_hdcp_hld_ioctl()
464 struct dw_hdcp *hdcp; in dw_hdcp_hld_open() local
468 hdcp = container_of(misc_dev, struct dw_hdcp, misc_dev); in dw_hdcp_hld_open()
469 pm_runtime_get_sync(hdcp->dev); in dw_hdcp_hld_open()
476 struct dw_hdcp *hdcp; in dw_hdcp_hld_release() local
480 hdcp = container_of(misc_dev, struct dw_hdcp, misc_dev); in dw_hdcp_hld_release()
481 pm_runtime_put(hdcp->dev); in dw_hdcp_hld_release()
497 static int dw_hdcp_hld_init(struct dw_hdcp *hdcp, struct resource *res, void __iomem *base) in dw_hdcp_hld_init() argument
499 hdcp->hl_dev.allocated = false; in dw_hdcp_hld_init()
500 hdcp->hl_dev.initialized = false; in dw_hdcp_hld_init()
501 hdcp->hl_dev.code_loaded = false; in dw_hdcp_hld_init()
502 hdcp->hl_dev.code = NULL; in dw_hdcp_hld_init()
503 hdcp->hl_dev.data = NULL; in dw_hdcp_hld_init()
504 hdcp->hl_dev.hpi_resource = res; in dw_hdcp_hld_init()
505 hdcp->hl_dev.hpi = base; in dw_hdcp_hld_init()
507 hdcp->misc_dev.name = devm_kasprintf(hdcp->dev, GFP_KERNEL, "hl_dev%d", hdcp->id); in dw_hdcp_hld_init()
508 if (!hdcp->misc_dev.name) in dw_hdcp_hld_init()
510 hdcp->misc_dev.minor = MISC_DYNAMIC_MINOR; in dw_hdcp_hld_init()
511 hdcp->misc_dev.fops = &dw_hdcp_hld_file_operations; in dw_hdcp_hld_init()
513 return misc_register(&hdcp->misc_dev); in dw_hdcp_hld_init()
516 static void dw_hdcp_hld_exit(struct dw_hdcp *hdcp) in dw_hdcp_hld_exit() argument
518 dw_hdcp_free_hl_dev_slot(&hdcp->hl_dev); in dw_hdcp_hld_exit()
520 misc_deregister(&hdcp->misc_dev); in dw_hdcp_hld_exit()
526 struct dw_hdcp *hdcp; in dw_hdcp_probe() local
531 hdcp = devm_kzalloc(dev, sizeof(*hdcp), GFP_KERNEL); in dw_hdcp_probe()
532 if (!hdcp) in dw_hdcp_probe()
544 hdcp->id = id; in dw_hdcp_probe()
545 hdcp->dev = dev; in dw_hdcp_probe()
547 hdcp->vo_grf = syscon_regmap_lookup_by_phandle(dev->of_node, "rockchip,vo-grf"); in dw_hdcp_probe()
548 if (IS_ERR(hdcp->vo_grf)) { in dw_hdcp_probe()
549 dev_err(hdcp->dev, "Get vo-grf failed\n"); in dw_hdcp_probe()
553 hdcp->rsts_bulk = devm_reset_control_array_get_exclusive(dev); in dw_hdcp_probe()
554 if (IS_ERR(hdcp->rsts_bulk)) { in dw_hdcp_probe()
559 hdcp->num_clks = devm_clk_bulk_get_all(dev, &hdcp->clks); in dw_hdcp_probe()
560 if (hdcp->num_clks < 1) { in dw_hdcp_probe()
565 ret = dw_hdcp_hld_init(hdcp, res, base); in dw_hdcp_probe()
571 platform_set_drvdata(pdev, hdcp); in dw_hdcp_probe()
573 pm_runtime_enable(hdcp->dev); in dw_hdcp_probe()
580 struct dw_hdcp *hdcp = platform_get_drvdata(pdev); in dw_hdcp_remove() local
582 dw_hdcp_hld_exit(hdcp); in dw_hdcp_remove()
584 pm_runtime_disable(hdcp->dev); in dw_hdcp_remove()
591 struct dw_hdcp *hdcp = dev_get_drvdata(dev); in dw_hdcp_runtime_suspend() local
593 hdcp->is_suspend = true; in dw_hdcp_runtime_suspend()
594 clk_bulk_disable_unprepare(hdcp->num_clks, hdcp->clks); in dw_hdcp_runtime_suspend()
596 dw_hdcp_free_hl(hdcp); in dw_hdcp_runtime_suspend()
603 struct dw_hdcp *hdcp = dev_get_drvdata(dev); in dw_hdcp_runtime_resume() local
606 ret = clk_bulk_prepare_enable(hdcp->num_clks, hdcp->clks); in dw_hdcp_runtime_resume()
610 dw_hdcp_reset(hdcp); in dw_hdcp_runtime_resume()
612 hdcp->is_suspend = false; in dw_hdcp_runtime_resume()