2005-07-06 23:26:27 +04:00
# include <linux/kernel.h>
# include <linux/stat.h>
# include <asm/macio.h>
# define macio_config_of_attr(field, format_string) \
static ssize_t \
field # # _show ( struct device * dev , struct device_attribute * attr , \
char * buf ) \
{ \
struct macio_dev * mdev = to_macio_device ( dev ) ; \
return sprintf ( buf , format_string , mdev - > ofdev . node - > field ) ; \
}
static ssize_t
compatible_show ( struct device * dev , struct device_attribute * attr , char * buf )
{
struct of_device * of ;
2006-07-12 09:40:29 +04:00
const char * compat ;
2005-07-06 23:26:27 +04:00
int cplen ;
int length = 0 ;
of = & to_macio_device ( dev ) - > ofdev ;
2007-04-27 07:41:15 +04:00
compat = of_get_property ( of - > node , " compatible " , & cplen ) ;
2005-07-06 23:26:27 +04:00
if ( ! compat ) {
* buf = ' \0 ' ;
return 0 ;
}
while ( cplen > 0 ) {
int l ;
length + = sprintf ( buf , " %s \n " , compat ) ;
buf + = length ;
l = strlen ( compat ) + 1 ;
compat + = l ;
cplen - = l ;
}
return length ;
}
2005-10-29 04:46:20 +04:00
static ssize_t modalias_show ( struct device * dev , struct device_attribute * attr ,
char * buf )
{
2007-05-06 19:38:47 +04:00
struct of_device * ofdev = to_of_device ( dev ) ;
int len ;
2005-10-29 04:46:20 +04:00
2008-04-24 17:16:00 +04:00
len = of_device_get_modalias ( ofdev , buf , PAGE_SIZE - 2 ) ;
2005-10-29 04:46:20 +04:00
2007-05-06 19:38:47 +04:00
buf [ len ] = ' \n ' ;
buf [ len + 1 ] = 0 ;
return len + 1 ;
2005-10-29 04:46:20 +04:00
}
2008-04-24 17:16:00 +04:00
static ssize_t devspec_show ( struct device * dev ,
struct device_attribute * attr , char * buf )
{
struct of_device * ofdev ;
ofdev = to_of_device ( dev ) ;
return sprintf ( buf , " %s \n " , ofdev - > node - > full_name ) ;
}
2005-07-06 23:26:27 +04:00
macio_config_of_attr ( name , " %s \n " ) ;
macio_config_of_attr ( type , " %s \n " ) ;
struct device_attribute macio_dev_attrs [ ] = {
__ATTR_RO ( name ) ,
__ATTR_RO ( type ) ,
__ATTR_RO ( compatible ) ,
2005-10-29 04:46:20 +04:00
__ATTR_RO ( modalias ) ,
2008-04-24 17:16:00 +04:00
__ATTR_RO ( devspec ) ,
2005-07-06 23:26:27 +04:00
__ATTR_NULL
} ;