Hi, > From: Anisse Astier <anisse@xxxxxxxxx> > Date: Thu, 19 Apr 2012 15:04:52 +0200 > Subject: [PATCH v4 1/2] rt2x00: debugfs support - allow a register to be empty > > Allow a register to be unspecified, therefore not creating its debugfs > file entry. > > Signed-off-by: Anisse Astier <anisse@xxxxxxxxx> > --- > Changes since v3: > - Don't print a debug message when register type isn't registered > --- > drivers/net/wireless/rt2x00/rt2x00debug.c | 71 +++++++++++++++-------------- > 1 file changed, 36 insertions(+), 35 deletions(-) > > diff --git a/drivers/net/wireless/rt2x00/rt2x00debug.c b/drivers/net/wireless/rt2x00/rt2x00debug.c > index 78787fc..5bb1221 100644 > --- a/drivers/net/wireless/rt2x00/rt2x00debug.c > +++ b/drivers/net/wireless/rt2x00/rt2x00debug.c > @@ -624,22 +624,21 @@ static struct dentry *rt2x00debug_create_file_chipset(const char *name, > data += sprintf(data, "revision:\t%04x\n", intf->rt2x00dev->chip.rev); > data += sprintf(data, "\n"); > data += sprintf(data, "register\tbase\twords\twordsize\n"); > - data += sprintf(data, "csr\t%d\t%d\t%d\n", > - debug->csr.word_base, > - debug->csr.word_count, > - debug->csr.word_size); > - data += sprintf(data, "eeprom\t%d\t%d\t%d\n", > - debug->eeprom.word_base, > - debug->eeprom.word_count, > - debug->eeprom.word_size); > - data += sprintf(data, "bbp\t%d\t%d\t%d\n", > - debug->bbp.word_base, > - debug->bbp.word_count, > - debug->bbp.word_size); > - data += sprintf(data, "rf\t%d\t%d\t%d\n", > - debug->rf.word_base, > - debug->rf.word_count, > - debug->rf.word_size); > +#define RT2X00DEBUGFS_SPRINTF_REGISTER(__name) \ > +{ \ > + if(debug->__name.read) \ > + data += sprintf(data, __stringify(__name) \ > + "\t%d\t%d\t%d\n", \ > + debug->__name.word_base, \ > + debug->__name.word_count, \ > + debug->__name.word_size); \ > +} > + RT2X00DEBUGFS_SPRINTF_REGISTER(csr); > + RT2X00DEBUGFS_SPRINTF_REGISTER(eeprom); > + RT2X00DEBUGFS_SPRINTF_REGISTER(bbp); > + RT2X00DEBUGFS_SPRINTF_REGISTER(rf); > +#undef RT2X00DEBUGFS_SPRINTF_REGISTER > + > blob->size = strlen(blob->data); > > return debugfs_create_blob(name, S_IRUSR, intf->driver_folder, blob); > @@ -694,25 +693,27 @@ void rt2x00debug_register(struct rt2x00_dev *rt2x00dev) > if (IS_ERR(intf->register_folder) || !intf->register_folder) > goto exit; > > -#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name) \ > -({ \ > - (__intf)->__name##_off_entry = \ > - debugfs_create_u32(__stringify(__name) "_offset", \ > - S_IRUSR | S_IWUSR, \ > - (__intf)->register_folder, \ > - &(__intf)->offset_##__name); \ > - if (IS_ERR((__intf)->__name##_off_entry) \ > - || !(__intf)->__name##_off_entry) \ > - goto exit; \ > - \ > - (__intf)->__name##_val_entry = \ > - debugfs_create_file(__stringify(__name) "_value", \ > - S_IRUSR | S_IWUSR, \ > - (__intf)->register_folder, \ > - (__intf), &rt2x00debug_fop_##__name);\ > - if (IS_ERR((__intf)->__name##_val_entry) \ > - || !(__intf)->__name##_val_entry) \ > - goto exit; \ > +#define RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(__intf, __name) \ > +({ \ > + if(debug->__name.read) { \ > + (__intf)->__name##_off_entry = \ > + debugfs_create_u32(__stringify(__name) "_offset", \ > + S_IRUSR | S_IWUSR, \ > + (__intf)->register_folder, \ > + &(__intf)->offset_##__name); \ > + if (IS_ERR((__intf)->__name##_off_entry) \ > + || !(__intf)->__name##_off_entry) \ > + goto exit; \ > + \ > + (__intf)->__name##_val_entry = \ > + debugfs_create_file(__stringify(__name) "_value", \ > + S_IRUSR | S_IWUSR, \ > + (__intf)->register_folder, \ > + (__intf), &rt2x00debug_fop_##__name); \ > + if (IS_ERR((__intf)->__name##_val_entry) \ > + || !(__intf)->__name##_val_entry) \ > + goto exit; \ > + } \ > }) > > RT2X00DEBUGFS_CREATE_REGISTER_ENTRY(intf, csr); Acked-by: Ivo van Doorn <IvDoorn@xxxxxxxxx> ÿôèº{.nÇ+?·?®??+%?Ëÿ±éݶ¥?wÿº{.nÇ+?·¥?{±ÿ«zW¬³ø§¶?¡Ü¨}©?²Æ zÚ&j:+v?¨þø¯ù®w¥þ?à2?Þ?¨èÚ&¢)ß¡«a¶Úÿÿûàz¿äz¹Þ?ú+?ù???Ý¢jÿ?wèþf