// SPDX-License-Identifier: GPL-2.0+ /* * R-Car Display Unit Channels Pair * * Copyright (C) 2013-2015 Renesas Electronics Corporation * * Contact: Laurent Pinchart ([email protected]) */ /* * The R8A7779 DU is split in per-CRTC resources (scan-out engine, blending * unit, timings generator, ...) and device-global resources (start/stop * control, planes, ...) shared between the two CRTCs. * * The R8A7790 introduced a third CRTC with its own set of global resources. * This would be modeled as two separate DU device instances if it wasn't for * a handful or resources that are shared between the three CRTCs (mostly * related to input and output routing). For this reason the R8A7790 DU must be * modeled as a single device with three CRTCs, two sets of "semi-global" * resources, and a few device-global resources. * * The rcar_du_group object is a driver specific object, without any real * counterpart in the DU documentation, that models those semi-global resources. */ #include <linux/clk.h> #include <linux/io.h> #include "rcar_du_drv.h" #include "rcar_du_group.h" #include "rcar_du_regs.h" u32 rcar_du_group_read(struct rcar_du_group *rgrp, u32 reg) { … } void rcar_du_group_write(struct rcar_du_group *rgrp, u32 reg, u32 data) { … } static void rcar_du_group_setup_pins(struct rcar_du_group *rgrp) { … } static void rcar_du_group_setup_defr8(struct rcar_du_group *rgrp) { … } static void rcar_du_group_setup_didsr(struct rcar_du_group *rgrp) { … } static void rcar_du_group_setup(struct rcar_du_group *rgrp) { … } /* * rcar_du_group_get - Acquire a reference to the DU channels group * * Acquiring the first reference setups core registers. A reference must be held * before accessing any hardware registers. * * This function must be called with the DRM mode_config lock held. * * Return 0 in case of success or a negative error code otherwise. */ int rcar_du_group_get(struct rcar_du_group *rgrp) { … } /* * rcar_du_group_put - Release a reference to the DU * * This function must be called with the DRM mode_config lock held. */ void rcar_du_group_put(struct rcar_du_group *rgrp) { … } static void __rcar_du_group_start_stop(struct rcar_du_group *rgrp, bool start) { … } void rcar_du_group_start_stop(struct rcar_du_group *rgrp, bool start) { … } void rcar_du_group_restart(struct rcar_du_group *rgrp) { … } int rcar_du_set_dpad0_vsp1_routing(struct rcar_du_device *rcdu) { … } static void rcar_du_group_set_dpad_levels(struct rcar_du_group *rgrp) { … } int rcar_du_group_set_routing(struct rcar_du_group *rgrp) { … }