seq_file: Introduce DEFINE_SHOW_ATTRIBUTE() helper macro
The DEFINE_SHOW_ATTRIBUTE() helper macro would be useful for current users, which are many of them, and for new comers to decrease code duplication. Acked-by: Lee Jones <lee.jones@linaro.org> Acked-by: Darren Hart (VMware) <dvhart@infradead.org> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
This commit is contained in:
Родитель
a2e5790d84
Коммит
a08f06bb7a
|
@ -1258,20 +1258,6 @@ static struct ab8500_prcmu_ranges ab8540_debug_ranges[AB8500_NUM_BANKS] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFINE_SHOW_ATTRIBUTE(__name) \
|
|
||||||
static int __name ## _open(struct inode *inode, struct file *file) \
|
|
||||||
{ \
|
|
||||||
return single_open(file, __name ## _show, inode->i_private); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
static const struct file_operations __name ## _fops = { \
|
|
||||||
.owner = THIS_MODULE, \
|
|
||||||
.open = __name ## _open, \
|
|
||||||
.read = seq_read, \
|
|
||||||
.llseek = seq_lseek, \
|
|
||||||
.release = single_release, \
|
|
||||||
} \
|
|
||||||
|
|
||||||
static irqreturn_t ab8500_debug_handler(int irq, void *data)
|
static irqreturn_t ab8500_debug_handler(int irq, void *data)
|
||||||
{
|
{
|
||||||
char buf[16];
|
char buf[16];
|
||||||
|
|
|
@ -208,20 +208,6 @@ static const struct pmc_data cht_data = {
|
||||||
.clks = cht_clks,
|
.clks = cht_clks,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DEFINE_SHOW_ATTRIBUTE(__name) \
|
|
||||||
static int __name ## _open(struct inode *inode, struct file *file) \
|
|
||||||
{ \
|
|
||||||
return single_open(file, __name ## _show, inode->i_private); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
static const struct file_operations __name ## _fops = { \
|
|
||||||
.owner = THIS_MODULE, \
|
|
||||||
.open = __name ## _open, \
|
|
||||||
.read = seq_read, \
|
|
||||||
.llseek = seq_lseek, \
|
|
||||||
.release = single_release, \
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline u32 pmc_reg_read(struct pmc_dev *pmc, int reg_offset)
|
static inline u32 pmc_reg_read(struct pmc_dev *pmc, int reg_offset)
|
||||||
{
|
{
|
||||||
return readl(pmc->regmap + reg_offset);
|
return readl(pmc->regmap + reg_offset);
|
||||||
|
|
|
@ -140,6 +140,20 @@ void *__seq_open_private(struct file *, const struct seq_operations *, int);
|
||||||
int seq_open_private(struct file *, const struct seq_operations *, int);
|
int seq_open_private(struct file *, const struct seq_operations *, int);
|
||||||
int seq_release_private(struct inode *, struct file *);
|
int seq_release_private(struct inode *, struct file *);
|
||||||
|
|
||||||
|
#define DEFINE_SHOW_ATTRIBUTE(__name) \
|
||||||
|
static int __name ## _open(struct inode *inode, struct file *file) \
|
||||||
|
{ \
|
||||||
|
return single_open(file, __name ## _show, inode->i_private); \
|
||||||
|
} \
|
||||||
|
\
|
||||||
|
static const struct file_operations __name ## _fops = { \
|
||||||
|
.owner = THIS_MODULE, \
|
||||||
|
.open = __name ## _open, \
|
||||||
|
.read = seq_read, \
|
||||||
|
.llseek = seq_lseek, \
|
||||||
|
.release = single_release, \
|
||||||
|
}
|
||||||
|
|
||||||
static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
|
static inline struct user_namespace *seq_user_ns(struct seq_file *seq)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_USER_NS
|
#ifdef CONFIG_USER_NS
|
||||||
|
|
|
@ -90,19 +90,6 @@ static int __name ## _show(struct seq_file *f, void *ptr) \
|
||||||
\
|
\
|
||||||
DEFINE_SHOW_ATTRIBUTE(__name)
|
DEFINE_SHOW_ATTRIBUTE(__name)
|
||||||
|
|
||||||
#define DEFINE_SHOW_ATTRIBUTE(__name) \
|
|
||||||
static int __name ## _open(struct inode *inode, struct file *file) \
|
|
||||||
{ \
|
|
||||||
return single_open(file, __name ## _show, inode->i_private); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
static const struct file_operations __name ## _fops = { \
|
|
||||||
.open = __name ## _open, \
|
|
||||||
.read = seq_read, \
|
|
||||||
.llseek = seq_lseek, \
|
|
||||||
.release = single_release, \
|
|
||||||
} \
|
|
||||||
|
|
||||||
static int features_show(struct seq_file *f, void *ptr)
|
static int features_show(struct seq_file *f, void *ptr)
|
||||||
{
|
{
|
||||||
struct hci_dev *hdev = f->private;
|
struct hci_dev *hdev = f->private;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче