static struct gpio_chip gpio_5892_chip =
{
.label = "5892",
.direction_input = gpio_5892_direction_input,
.direction_output = gpio_5892_direction_output,
.get = gpio_5892_get,
.set = gpio_5892_set,
.base = 0,
.ngpio = ARCH_NR_GPIOS,
};
/****************************************************************************
*
* brcm_init_gpio
*
* Sets up gpiolib so that it's aware of how to manipulate our GPIOs
*
*****************************************************************************/
void bcm_init_gpio( void )
{
bcm5892_gpiochip_add( &gpio_5892_chip );
} // bcm_init_gpio
#endif //#ifdef CONFIG_HAVE_GPIO_LIB
。。。。
static int __init gpio_init( void )
{
/* Initialize debug level */
gLevel = DBG_DEFAULT_LEVEL;
GPIO_DEBUG(DBG_INFO,( "gpio_init called\n" ));
#ifdef CONFIG_HAVE_GPIO_LIB
bcm_init_gpio( );#endif
printk( banner );
return 0;
} /* gpio_init */
module_init(gpio_init);
在gpio_chip结构中的方向、端口值等函数,在驱动中要如何调用?比如我在驱动中使用到哪些端口,然后要设置端口方向和口值。
------解决方案--------------------
1、首先需要一个驱动的框架(我的感觉就像是一种仪式,让操作系统明白这是驱动,正在申请驱动的特权);
2、在这个框架下,再进行物理地址到虚拟地址的映射;
3、然后,调用端口函数来访问端口。
有的操作系统的端口操作函数已经做过物理地址的映射,就不需要用户自己再映射了。
无操作系统的裸机下运行程序,1、2两步就免了
------解决方案--------------------
你这个不是已经是驱动了吗?还怎么在驱动中调用?看不懂你的问题
------解决方案--------------------
你可以在bcm5892这个芯片的GPIO驱动的上层架构中直接调用direction_input,get,set等函数来获取GPIO口设置I/O