Files
base/drivers/include/g2dlite/g2dlite_core.h
2025-11-07 09:57:14 +08:00

75 lines
1.7 KiB
C

/**
* @file g2dlite_core.h
* @brief SemiDrive G2DLite core header file.
*
* @copyright Copyright (c) 2022 Semidrive Semiconductor.
* All rights reserved.
*/
#ifndef G2DLITE_CORE_H__
#define G2DLITE_CORE_H__
#include <dispss/disp_data_type.h>
#include <reg.h>
#include <string.h>
enum {
G2DLITE_FUN_BLEND = 0x1,
G2DLITE_FUN_ROTATION = 0x2,
};
typedef enum {
G2DLITE_CPU_WRITE,
G2DLITE_CMD_WRITE,
} g2dlite_write_mode;
typedef enum {
G2DLITE_MLC_GP,
G2DLITE_MLC_SP,
G2DLITE_MLC_MAX
} g2dlite_mlc_layer;
typedef enum {
MLC_PATH_BG,
MLC_PATH_GP,
MLC_PATH_SP,
MLC_PATH_MAX
} g2dlite_mlc_path;
typedef struct {
unsigned long base_addr;
unsigned int irq;
unsigned int layer_n;
} g2dlite_profile_t;
static inline unsigned int reg_value(unsigned int val, unsigned int src,
unsigned int shift, unsigned int mask)
{
return (src & ~mask) | ((val << shift) & mask);
}
static inline unsigned int g2dlite_read(unsigned long base, unsigned int reg)
{
return readl(base + reg);
}
static inline void g2dlite_write(unsigned long base, unsigned int reg,
unsigned int value)
{
writel(value, base + reg);
}
static inline void g2dlite_cwrite(struct g2dlite_device *dev, int cmd_id,
unsigned int reg, unsigned int value)
{
if (dev->write_mode == G2DLITE_CMD_WRITE) {
cmdfile_info *cmd = &dev->cmd_info[cmd_id];
cmd->arg[cmd->len++] = reg;
cmd->arg[cmd->len++] = value;
if (!cmd->dirty)
cmd->dirty = 1;
} else {
writel(value, dev->reg_base + reg);
}
}
#endif /* G2DLITE_CORE_H__ */