优化版本
《浅析wlan模块添加时bus扫描和standby阻止gpio电平改变实现方法》浅析如何打印显示platform_bus_type总线上注册的所有设备信息
#include <linux/platform_device.h>
typedef struct __luther_ss_fn {
const char* name;
int id;
void** dev;
}_luther_ss_fn;
static int luther_gliethttp_get_platform_fn(struct device *dev, void *data)
{
struct platform_device* platform_device = container_of(dev, struct platform_device, dev);
_luther_ss_fn *luther_ss_fn = data;
//enum {name_match = 0x01,id_match = 0x02};
//int match = 0;
printk(KERN_ALERT "%-20s %4d\n", platform_device->name, platform_device->id);
if (luther_ss_fn->name)
{
if (strncmp(luther_ss_fn->name,platform_device->name, BUS_ID_SIZE))
return 0;
}
if (luther_ss_fn->id == platform_device->id) {
if (luther_ss_fn->dev) *luther_ss_fn->dev = platform_device;
}
return 0;
}
void* luther_gliethttp_get_platform_device_by_id_name(const char *name, int id, void **dev)
{
_luther_ss_fn luther_ss_fn;
luther_ss_fn.name = name;
luther_ss_fn.id = id;
luther_ss_fn.dev = dev;
if (dev)
*dev = NULL;
bus_for_each_dev(&platform_bus_type, NULL, &luther_ss_fn, luther_gliethttp_get_platform_fn);
if ( luther_ss_fn.dev && *luther_ss_fn.dev)
return ((struct platform_device* )(*luther_ss_fn.dev))->dev.driver_data;
else return NULL;
}
应用举例:
static int
wlan_init_module(void)
{
...
void *pmmc_host;
pmmc_host = luther_gliethttp_get_platform_device_by_id_name("pxa2xx-mci", 1, &pmmc_host);//用来获取mmc控制器的控制结构体
mmc_detect_change(pmmc_host, 0);
//立即执行mmc检测,如果sd设备移出,那么/sys/bus/sdio/devices下的设备文件将从sysfs文件系统中删除,否则,添加设备文件[luther.gliethttp]
...
}
|
比如打印如下信息:
[ 602.274382] pxa930-acipc -1
[ 602.278075] pxa3xx-freq 0
[ 602.281889] pxa3xx-pmu 0
[ 602.285551] pxa2xx-fb -1
[ 602.289641] micco-bl -1
[ 602.293303] micco-kp-bl -1
[ 602.297514] micco-ts -1
[ 602.301176] pxa3xx-imm -1
[ 602.305266] micco-charger -1
[ 602.308928] pxa-ispt -1
[ 602.313078] gpio-keys -1
[ 602.316740] pxa2xx-uart 0
[ 602.320433] pxa2xx-uart 1
[ 602.324126] pxa2xx-uart 2
[ 602.327818] pxa3xx-keypad 0
[ 602.331969] pxa-leds -1
[ 602.335631] gpio_sleep_debug -1
[ 602.339751] onenand -1
[ 602.343413] pxa9xx-u2o -1
[ 602.347563] pxa3xx-camera -1
[ 602.351225] a3212_hall -1
[ 602.355376] pxa2xx-mci 0
[ 602.359068] pxa2xx-mci 1//获取该mmc host结构体
[ 602.363249] cm3601_alsps -1
[ 602.366911] pxa2xx-i2c 0
[ 602.371001] pxa2xx-i2s -1
[ 602.374663] pxa2xx-v4l2ov2 -1
[ 602.378813] pxa3xx-rtc -1
[ 602.382506] pxa3xx-otg -1
[ 602.386168] pxa27x-ssp 0
[ 602.389891] pxa27x-ssp 1
[ 602.393553] pxa27x-ssp 2
[ 602.397704] pxa27x-ssp 3
[ 602.401366] ds1wm -1
[ 602.405516] m2d -1
[ 602.409209] pxa3xx-mved -1
[ 602.413359] bluetooth -1
[ 602.417021] alarm -1
[ 602.421141] soc-audio -1
[ 602.424803] seh 0
[ 602.428954] msl 0
[ 602.432616] intel-ccidatastub 0
[ 602.436766] marvell-ccinet 0
阅读(1416) | 评论(0) | 转发(0) |