60 lines
1.1 KiB
C
60 lines
1.1 KiB
C
/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
|
|
/*
|
|
* Copyright (c) 2019 Amlogic, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __AML_GPIO__
|
|
#define __AML_GPIO__
|
|
#include <asm/io.h>
|
|
/**
|
|
* struct meson_reg_desc - a register descriptor
|
|
*
|
|
* @reg: register offset in the regmap
|
|
* @bit: bit index in register
|
|
*
|
|
* The structure describes the information needed to control pull,
|
|
* pull-enable, direction, etc. for a single pin
|
|
*/
|
|
struct meson_reg_desc {
|
|
unsigned int reg;
|
|
unsigned int bit;
|
|
};
|
|
|
|
/**
|
|
* enum meson_reg_type - type of registers encoded in @meson_reg_desc
|
|
*/
|
|
enum meson_reg_type {
|
|
REG_PULLEN,
|
|
REG_PULL,
|
|
REG_DIR,
|
|
REG_OUT,
|
|
REG_IN,
|
|
NUM_REG,
|
|
};
|
|
|
|
|
|
|
|
|
|
struct meson_bank {
|
|
const char *name;
|
|
unsigned int first;
|
|
unsigned int last;
|
|
struct meson_reg_desc regs[NUM_REG];
|
|
};
|
|
#define GPIO_REG_BIT(reg, bit) ((reg<<5)|bit)
|
|
#define GPIO_REG(value) ((value>>5))
|
|
#define GPIO_BIT(value) ((value&0x1F))
|
|
//#define BIT(bit) (1<<bit)
|
|
static inline void regmap_update_bits(unsigned long reg,unsigned mask,unsigned val)
|
|
{
|
|
|
|
unsigned int tmp, orig;
|
|
orig = readl(reg);
|
|
tmp = orig & ~mask;
|
|
tmp |= val & mask;
|
|
writel(tmp,reg);
|
|
return;
|
|
}
|
|
|
|
#endif
|