linux/drivers/gpu/drm/msm/disp/dpu1/dpu_hw_intf.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/* Copyright (c) 2015-2018, The Linux Foundation. All rights reserved.
   3 */
   4
   5#ifndef _DPU_HW_INTF_H
   6#define _DPU_HW_INTF_H
   7
   8#include "dpu_hw_catalog.h"
   9#include "dpu_hw_mdss.h"
  10#include "dpu_hw_util.h"
  11#include "dpu_hw_blk.h"
  12
  13struct dpu_hw_intf;
  14
  15/* intf timing settings */
  16struct intf_timing_params {
  17        u32 width;              /* active width */
  18        u32 height;             /* active height */
  19        u32 xres;               /* Display panel width */
  20        u32 yres;               /* Display panel height */
  21
  22        u32 h_back_porch;
  23        u32 h_front_porch;
  24        u32 v_back_porch;
  25        u32 v_front_porch;
  26        u32 hsync_pulse_width;
  27        u32 vsync_pulse_width;
  28        u32 hsync_polarity;
  29        u32 vsync_polarity;
  30        u32 border_clr;
  31        u32 underflow_clr;
  32        u32 hsync_skew;
  33};
  34
  35struct intf_prog_fetch {
  36        u8 enable;
  37        /* vsync counter for the front porch pixel line */
  38        u32 fetch_start;
  39};
  40
  41struct intf_status {
  42        u8 is_en;               /* interface timing engine is enabled or not */
  43        u8 is_prog_fetch_en;    /* interface prog fetch counter is enabled or not */
  44        u32 frame_count;        /* frame count since timing engine enabled */
  45        u32 line_count;         /* current line count including blanking */
  46};
  47
  48/**
  49 * struct dpu_hw_intf_ops : Interface to the interface Hw driver functions
  50 *  Assumption is these functions will be called after clocks are enabled
  51 * @ setup_timing_gen : programs the timing engine
  52 * @ setup_prog_fetch : enables/disables the programmable fetch logic
  53 * @ enable_timing: enable/disable timing engine
  54 * @ get_status: returns if timing engine is enabled or not
  55 * @ get_line_count: reads current vertical line counter
  56 * @bind_pingpong_blk: enable/disable the connection with pingpong which will
  57 *                     feed pixels to this interface
  58 */
  59struct dpu_hw_intf_ops {
  60        void (*setup_timing_gen)(struct dpu_hw_intf *intf,
  61                        const struct intf_timing_params *p,
  62                        const struct dpu_format *fmt);
  63
  64        void (*setup_prg_fetch)(struct dpu_hw_intf *intf,
  65                        const struct intf_prog_fetch *fetch);
  66
  67        void (*enable_timing)(struct dpu_hw_intf *intf,
  68                        u8 enable);
  69
  70        void (*get_status)(struct dpu_hw_intf *intf,
  71                        struct intf_status *status);
  72
  73        u32 (*get_line_count)(struct dpu_hw_intf *intf);
  74
  75        void (*bind_pingpong_blk)(struct dpu_hw_intf *intf,
  76                        bool enable,
  77                        const enum dpu_pingpong pp);
  78};
  79
  80struct dpu_hw_intf {
  81        struct dpu_hw_blk base;
  82        struct dpu_hw_blk_reg_map hw;
  83
  84        /* intf */
  85        enum dpu_intf idx;
  86        const struct dpu_intf_cfg *cap;
  87        const struct dpu_mdss_cfg *mdss;
  88
  89        /* ops */
  90        struct dpu_hw_intf_ops ops;
  91};
  92
  93/**
  94 * to_dpu_hw_intf - convert base object dpu_hw_base to container
  95 * @hw: Pointer to base hardware block
  96 * return: Pointer to hardware block container
  97 */
  98static inline struct dpu_hw_intf *to_dpu_hw_intf(struct dpu_hw_blk *hw)
  99{
 100        return container_of(hw, struct dpu_hw_intf, base);
 101}
 102
 103/**
 104 * dpu_hw_intf_init(): Initializes the intf driver for the passed
 105 * interface idx.
 106 * @idx:  interface index for which driver object is required
 107 * @addr: mapped register io address of MDP
 108 * @m :   pointer to mdss catalog data
 109 */
 110struct dpu_hw_intf *dpu_hw_intf_init(enum dpu_intf idx,
 111                void __iomem *addr,
 112                const struct dpu_mdss_cfg *m);
 113
 114/**
 115 * dpu_hw_intf_destroy(): Destroys INTF driver context
 116 * @intf:   Pointer to INTF driver context
 117 */
 118void dpu_hw_intf_destroy(struct dpu_hw_intf *intf);
 119
 120#endif /*_DPU_HW_INTF_H */
 121