kernel 2.6.22.18 omap qpio
Hi all
I wrote an driver to the activation of " GPIO " according to the kernel instructions (gpio.txt) and when I request to free the GPIO I receive always that the GPIO is reserved .
What the required steps in order to toggle the GPIO MUXED and not MUXED
Regards Doron Sandroy
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100302/83642865/attachment-0001.htm>
Hi tao
Yes the processor is OMAP 35XX
The code off the driver:
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <asm/uaccess.h>
#include <asm/arch/gpio.h>
//#include <asm/gpio.h>
#include <asm/arch/omap34xx.h>
#include <asm/arch/hardware.h>
#include <asm/arch/mux.h>
#include <asm/arch/board.h>
#include <asm/arch/common.h>
#include <asm/arch/keypad.h>
#include <asm/arch/dma.h>
#include <asm/arch/gpmc.h>
#include <asm/arch/twl4030-rtc.h>
#include <asm/arch/mcspi.h>
#include <asm/arch/prcm.h>
static int device_open(struct inode *inode, struct file *file)
{
#ifdef DEBUG
printk(KERN_INFO "device_open(%p)\n", file);
#endif
return 0;
}
static int device_release(struct inode *inode, struct file *file)
{
#ifdef DEBUG
printk(KERN_INFO "device_release(%p,%p)\n", inode, file);
#endif
return 0;
}
static int device_ioctl(struct inode *inode, struct file *file, unsigned int ioctl_num, unsigned long ioctl_param)
{
int ret_val = 0; int ret = 0;
struct pin_value *temp_pin, pv;
switch(ioctl_num)
{ case IOCTL_CONFIG_PIN_VALUE:
temp_pin = (struct pin_value*)ioctl_param;
//if (omap_cfg_reg(temp_pin->pin))
if (omap_request_gpio(temp_pin->pin))
{
omap_free_gpio(temp_pin->pin);
}
else{
printk(KERN_INFO "gpio not config(%lu )\n", temp_pin->pin);
ret_val = -1;
goto ioctl_out;
}
break;
case IOCTL_FREE_PIN_VALUE:
temp_pin = (struct pin_value*)ioctl_param;
omap_free_gpio(temp_pin->pin);
printk(KERN_INFO "gpio not free(%lu)\n", temp_pin->pin);
ret_val = -1;
break;
case IOCTL_SET_PIN_VALUE:
temp_pin = (struct pin_value*)ioctl_param;
//printk(KERN_INFO "try to set gpio pin(%lu ) return %d \n",temp_pin->pin,ret);
omap_request_gpio((int)temp_pin->pin);
omap_set_gpio_direction((int)temp_pin->pin, 0);//input=1//output=0
if ((int)temp_pin->value)
omap_set_gpio_dataout((int)temp_pin->pin,1);
else
omap_set_gpio_dataout((int)temp_pin->pin,0);
printk(KERN_INFO "gpio set(%lu ) to val %d\n",temp_pin->pin,temp_pin->value);
//ret = omap_get_gpio_datain((int)temp_pin->pin);
//printk(KERN_INFO "gpio get (%lu ) to val %d\n",temp_pin->pin,ret);
omap_free_gpio((int)temp_pin->pin);
ret_val = -1;
break;
case IOCTL_GET_PIN_VALUE:
temp_pin = (struct pin_value*)ioctl_param;
pv.pin = temp_pin->pin;
/*
omap_get_gpio_datain(int gpio)
Description: This function is responsible for reading pinvalues.
Parameter: int gpio - GPIO PIN (Pin 0-63)
*/
//omap_free_gpio((int)temp_pin->pin);
if (omap_request_gpio(temp_pin->pin)==0)
{
omap_set_gpio_direction(temp_pin->pin, 1);//input=1//output=0
pv.value = omap_get_gpio_datain(temp_pin->pin);
printk(KERN_INFO "gpio get val (%lu ) to val %d\n",
temp_pin->pin,pv.value);
if (copy_to_user(temp_pin, &pv, sizeof(struct pin_value))
!= 0)
{
ret_val = -1;
goto ioctl_out;
}
omap_free_gpio((int)temp_pin->pin);
//ret_val = pv.value;
//copy_to_user(temp_pin, &pv, sizeof(structpin_value));
}
else{
printk(KERN_INFO "gpio not free(%lu )\n",temp_pin->pin);
ret_val = -1;
goto ioctl_out;
}
break;
case IOCTL_SET_PIN_INPUT:
temp_pin = (struct pin_value*)ioctl_param;
if (omap_request_gpio(temp_pin->pin)==0)
omap_set_gpio_direction(temp_pin->pin, temp_pin->value);//input=1//output=0
else{
printk(KERN_INFO "gpio not free(%lu )\n", temp_pin->pin);
ret_val = -1;
goto ioctl_out;
}
break;}
ioctl_out:
//up(&sw_sem);
return ret_val;
}
struct file_operations our_file_ops = {
.ioctl = device_ioctl,
.open = device_open,
.release = device_release,
.owner = THIS_MODULE,
};
int init_module()
{
int ret_val;
ret_val = register_chrdev(MAJOR_NUM, DEVICE_NAME, &our_file_ops);
if (ret_val < 0)
{ printk(KERN_ALERT "device %s failed(%d)\n", DEVICE_NAME, ret_val);
return ret_val;}
sema_init(&sw_sem, 1);
printk(KERN_INFO "mknod /dev/%s c %d 0\n", DEVICE_NAME, MAJOR_NUM);/*
omap_cfg_reg(MUX1_1_GPIO113);
omap_cfg_reg(MUX1_2_GPIO114);
omap_cfg_reg(MUX1_3_GPIO115);
ret = omap_request_gpio(MUX1_1_GPIO113);
if (ret < 0)
printk(KERN_ERR "SELECT_MUX1_1: can't reserve GPIO:%d !\n",MUX1_1_GPIO113);
ret = omap_request_gpio(MUX1_2_GPIO114);
if (ret < 0)
printk(KERN_ERR "SELECT_MUX1_2: can't reserve GPIO:%d !\n",MUX1_2_GPIO114);
ret = omap_request_gpio(MUX1_3_GPIO115);
if (ret < 0)
printk(KERN_ERR "SELECT_MUX1_3: can't reserve GPIO:%d !\n",MUX1_3_GPIO115);
*/
return 0;
}
void cleanup_module()
{
unregister_chrdev(MAJOR_NUM, DEVICE_NAME);
}
Regard Doron Sandroy
From: TAO HU [mailto:tghk48 at motorola.com]
Sent: Monday, March 08, 2010 8:45 AM
To: doron
Subject: Re: kernel 2.6.22.18 omap qpio
Are you using OMAP processor?
Can you post the piece of code so people can help
On Wed, Mar 3, 2010 at 4:25 AM, doron <[email protected]> wrote:
Hi all
I wrote an driver to the activation of " GPIO " according to the kernel instructions (gpio.txt) and when I request to free the GPIO I receive always that the GPIO is reserved .
What the required steps in order to toggle the GPIO MUXED and not MUXED
Regards Doron Sandroy
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Signature · 8 lines
Best Regards Hu Tao -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100308/c56f394c/attachment-0001.htm>
I assume the error you referred to is as below.
omap_cfg_reg(MUX1_1_GPIO113);
... ...
ret = omap_request_gpio(MUX1_1_GPIO113);
????? if (ret < 0)
??????????? printk(KERN_ERR "SELECT_MUX1_1: can't reserve GPIO:%d !\n", MUX1_1_GPIO113);
Pls don't be confused by MUX setting and GPIO operation.
Calling GPIO API (omap_request_gpio() etc.) is independent of MUX setting though they have functional dependency.
It means that the number passed to omap_request_gpio() should be GPIO# (113 in this case).
So the correct code should beomap_cfg_reg(MUX1_1_GPIO113);
... ...
ret = omap_request_gpio(113);
Quoted 421 lines · doron
Hi tao
Yes the processor is OMAP 35XX
The code off the driver:
#include <
linux/kernel.h>#include <
linux/module.h>#include <
linux/fs.h>#include <
asm/uaccess.h>#include <
asm/arch/gpio.h>//#include <
asm/gpio.h>#include <
asm/arch/omap34xx.h>#include <
asm/arch/hardware.h>#include <
asm/arch/mux.h>#include <
asm/arch/board.h>#include <
asm/arch/common.h>#include <
asm/arch/keypad.h>#include <
asm/arch/dma.h>#include <
asm/arch/gpmc.h>#include <
asm/arch/twl4030-rtc.h>#include <
asm/arch/mcspi.h>#include <
asm/arch/prcm.h>static int
device_open(struct inode *inode, struct file *file){
#ifdef DEBUG
?
printk(KERN_INFO "device_open(%p)\n", file);#endif
? return 0;
}
static int
device_release(struct inode *inode, struct file *file){
#ifdef DEBUG
?
printk(KERN_INFO "device_release(%p,%p)\n", inode, file);#endif
? return 0;
}
static int
device_ioctl(struct inode *inode, struct file *file, unsigned int ioctl_num, unsigned long ioctl_param){
? int
ret_val= 0;? int ret = 0;
? struct
pin_value*temp_pin, pv;?
switch(ioctl_num)? {
??? case
IOCTL_CONFIG_PIN_VALUE:?????
temp_pin= (struct pin_value*)ioctl_param;????? //if (
omap_cfg_reg(temp_pin->pin))????? if (
omap_request_gpio(temp_pin->pin))????? {
???????????
omap_free_gpio(temp_pin->pin);????? }
????? else{
????? ????
printk(KERN_INFO "gpio not config(%lu )\n", temp_pin->pin);???????????
ret_val= -1;??????????? goto
ioctl_out;????? ??? }
????? break;
??? case
IOCTL_FREE_PIN_VALUE:???????????
temp_pin= (struct pin_value*)ioctl_param;???????????
omap_free_gpio(temp_pin->pin);???????????
printk(KERN_INFO "gpio not free(%lu)\n", temp_pin->pin);???????????
ret_val= -1;????? break;
??? case
IOCTL_SET_PIN_VALUE:???????????
temp_pin= (struct pin_value*)ioctl_param;??????????? //printk(KERN_INFO "try to set gpio pin(%lu ) return %d \n", temp_pin->pin,ret);
??????????? omap_request_gpio((int)temp_pin->pin);
???????????
omap_set_gpio_direction((int)temp_pin->pin, 0); //input=1//output=0??????????? if ((int)temp_pin->value)
????????????????? omap_set_gpio_dataout((int)temp_pin->pin,1);
??????????? else
????????????????? omap_set_gpio_dataout((int)temp_pin->pin,0);
???????????
printk(KERN_INFO "gpio set(%lu ) to val %d\n", temp_pin->pin,temp_pin->value);??????????? //ret = omap_get_gpio_datain((int)temp_pin->pin);
??????????? //printk(KERN_INFO "gpio get (%lu ) to val %d\n", temp_pin->pin,ret);
??????????? omap_free_gpio((int)temp_pin->pin);
???????????
ret_val= -1;??????????? break;
??? case
IOCTL_GET_PIN_VALUE:??????????? ?
temp_pin= (struct pin_value*)ioctl_param;??????????? ? pv.pin =
temp_pin->pin;??????????? /*
???????????
omap_get_gpio_datain(int gpio)??????????? Description: This function is responsible for reading pin values.
??????????? Parameter: int gpio - GPIO PIN (Pin 0-63)
??????????? */
??????????? //omap_free_gpio((int)temp_pin->pin);
??????????? if (omap_request_gpio(temp_pin->pin)==0)
??????????? {
?????????????????
omap_set_gpio_direction(temp_pin->pin, 1); //input=1//output=0????????????????? pv.value =
omap_get_gpio_datain(temp_pin->pin);?????????????????
printk(KERN_INFO "gpio get val (%lu ) to val %d\n", temp_pin->pin,pv.value);????????????????? if (
copy_to_user(temp_pin, &pv, sizeof(struct pin_value))!= 0)??????????????????????? {
???????????????????????
ret_val= -1;??????????????????????? goto
ioctl_out;??????????????????????? }
??????????????????????? omap_free_gpio((int)temp_pin->pin);
??????????????????????? ?//ret_val = pv.value;
??????????????????????? //copy_to_user(temp_pin, &pv,
sizeof(struct pin_value));??????????? }
??????????? else{
???????????????????????
printk(KERN_INFO "gpio not free(%lu )\n", temp_pin->pin);?????????????????
ret_val= -1;????????????????? goto
ioctl_out;????????????????? }
????? break;
??? case
IOCTL_SET_PIN_INPUT:?????
temp_pin= (struct pin_value*)ioctl_param;????? if (omap_request_gpio(temp_pin->pin)==0)
????? ???????????
omap_set_gpio_direction(temp_pin->pin, temp_pin->value); //input=1//output=0????? else{
?????????????????
printk(KERN_INFO "gpio not free(%lu )\n", temp_pin->pin);???????????
ret_val= -1;??????????? goto
ioctl_out;??????????? }
???? break;
? }
ioctl_out:? //up(&sw_sem);
? return
ret_val;}
struct
file_operationsour_file_ops= {? .ioctl =
device_ioctl,? .open =
device_open,? .release =
device_release,? .owner =
THIS_MODULE,};
int
init_module(){
? int
ret_val;?
ret_val=register_chrdev(MAJOR_NUM, DEVICE_NAME, &our_file_ops);? if (
ret_val< 0)? {
???
printk(KERN_ALERT "device %s failed(%d)\n", DEVICE_NAME, ret_val);??? return
ret_val;? }
? ???
sema_init(&sw_sem, 1);? ???
printk(KERN_INFO "mknod /dev/%s c %d 0\n", DEVICE_NAME, MAJOR_NUM);/*
?????
omap_cfg_reg(MUX1_1_GPIO113);?????
omap_cfg_reg(MUX1_2_GPIO114);?????
omap_cfg_reg(MUX1_3_GPIO115);????? ret =
omap_request_gpio(MUX1_1_GPIO113);????? if (ret < 0)
???????????
printk(KERN_ERR "SELECT_MUX1_1: can't reserve GPIO:%d !\n", MUX1_1_GPIO113);????? ret =
omap_request_gpio(MUX1_2_GPIO114);????? if (ret < 0)
???????????
printk(KERN_ERR "SELECT_MUX1_2: can't reserve GPIO:%d !\n", MUX1_2_GPIO114);????? ret =
omap_request_gpio(MUX1_3_GPIO115);????? if (ret < 0)
???????????
printk(KERN_ERR "SELECT_MUX1_3: can't reserve GPIO:%d !\n", MUX1_3_GPIO115);*/
? return 0;
}
void
cleanup_module(){
?
unregister_chrdev(MAJOR_NUM, DEVICE_NAME);}
Regard Doron Sandroy
From: TAO HU [mailto:tghk48 at motorola.com]
Sent: Monday, March 08, 2010 8:45 AM
To: doron
Subject: Re: kernel 2.6.22.18 omap qpioAre you using OMAP processor?
Can you post the piece of code so people can helpOn Wed, Mar 3, 2010 at 4:25 AM, doron <[email protected]> wrote:
Hi all
I wrote an driver ?to the activation of " GPIO " according to the kernel ?instructions (gpio.txt) and when I request to free the GPIO I receive always that the GPIO is reserved .
What the required steps in order to toggle the GPIO MUXED and not MUXED
Regards? Doron Sandroy
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Quoted 4 lines
--
Best Regards
Hu Tao
--
Best Regards
Hu Tao
Sorry tao all of this code is remarked and not compiled, it for testing. The problem is that I install the driver and try to set the GPIO or to clear and I did not see any change
And I see all parameter goes into the kernel ok (GPIO number & value) Regard doron
-----Original Message-----
From: TAO HU [mailto:tghk48 at motorola.com]
Sent: Monday, March 08, 2010 11:15 AM
To: doron
Cc: TAO HU; linux-arm-kernel at lists.infradead.org
Subject: Re: kernel 2.6.22.18 omap qpio
I assume the error you referred to is as below.
omap_cfg_reg(MUX1_1_GPIO113);
... ...
ret = omap_request_gpio(MUX1_1_GPIO113);
????? if (ret < 0)
??????????? printk(KERN_ERR "SELECT_MUX1_1: can't reserve GPIO:%d !\n", MUX1_1_GPIO113);
Pls don't be confused by MUX setting and GPIO operation.
Calling GPIO API (omap_request_gpio() etc.) is independent of MUX setting though they have functional dependency.
It means that the number passed to omap_request_gpio() should be GPIO# (113 in this case).
So the correct code should beomap_cfg_reg(MUX1_1_GPIO113);
... ...
ret = omap_request_gpio(113);
Quoted 85 lines · doron
Hi tao
Yes the processor is OMAP 35XX
The code off the driver:
#include <
linux/kernel.h>#include <
linux/module.h>#include <
linux/fs.h>#include <
asm/uaccess.h>#include <
asm/arch/gpio.h>//#include <
asm/gpio.h>#include <
asm/arch/omap34xx.h>#include <
asm/arch/hardware.h>#include <
asm/arch/mux.h>#include <
asm/arch/board.h>#include <
asm/arch/common.h>#include <
asm/arch/keypad.h>#include <
asm/arch/dma.h>#include <
asm/arch/gpmc.h>#include <
asm/arch/twl4030-rtc.h>#include <
asm/arch/mcspi.h>#include <
asm/arch/prcm.h>static int
device_open(struct inode *inode, struct file *file){
#ifdef DEBUG
?
printk(KERN_INFO "device_open(%p)\n", file);#endif
? return 0;
}
static int
device_release(struct inode *inode, struct file *file){
#ifdef DEBUG
?
printk(KERN_INFO "device_release(%p,%p)\n", inode, file);#endif
Quoted 7 lines
? return 0;
}
static int device_ioctl(struct inode *inode, struct file *file, unsigned
int ioctl_num, unsigned long ioctl_param)
Quoted 59 lines
{
? int
ret_val= 0;? int ret = 0;
? struct
pin_value*temp_pin, pv;?
switch(ioctl_num)? {
??? case
IOCTL_CONFIG_PIN_VALUE:?????
temp_pin= (struct pin_value*)ioctl_param;????? //if (
omap_cfg_reg(temp_pin->pin))????? if (
omap_request_gpio(temp_pin->pin))????? {
???????????
omap_free_gpio(temp_pin->pin);????? }
????? else{
????? ????
printk(KERN_INFO "gpio not config(%lu )\n", temp_pin->pin);???????????
ret_val= -1;??????????? goto
ioctl_out;????? ??? }
????? break;
??? case
IOCTL_FREE_PIN_VALUE:???????????
temp_pin= (struct pin_value*)ioctl_param;???????????
omap_free_gpio(temp_pin->pin);???????????
printk(KERN_INFO "gpio not free(%lu)\n", temp_pin->pin);???????????
ret_val= -1;
Quoted 7 lines
????? break;
??? case
IOCTL_SET_PIN_VALUE:???????????
temp_pin= (struct pin_value*)ioctl_param;??????????? //printk(KERN_INFO "try to set gpio pin(%lu ) return %d \n",
temp_pin->pin,ret);
Quoted 4 lines
??????????? omap_request_gpio((int)temp_pin->pin);
???????????
omap_set_gpio_direction((int)temp_pin->pin, 0);
//input=1//output=0
Quoted 5 lines
??????????? if ((int)temp_pin->value)
????????????????? omap_set_gpio_dataout((int)temp_pin->pin,1);
Quoted 7 lines
??????????? else
????????????????? omap_set_gpio_dataout((int)temp_pin->pin,0);
??????????? printk(KERN_INFO "gpio set(%lu ) to val %d\n",
temp_pin->pin,temp_pin->value);
Quoted 4 lines
??????????? //ret = omap_get_gpio_datain((int)temp_pin->pin);
??????????? //printk(KERN_INFO "gpio get (%lu ) to val %d\n",
temp_pin->pin,ret);
Quoted 13 lines
??????????? omap_free_gpio((int)temp_pin->pin);
???????????
ret_val= -1;??????????? break;
??? case
IOCTL_GET_PIN_VALUE:??????????? ?
temp_pin= (struct pin_value*)ioctl_param;
Quoted 7 lines
??????????? ? pv.pin =
temp_pin->pin;??????????? /*
???????????
omap_get_gpio_datain(int gpio)??????????? Description: This function is responsible for reading pin
values.
Quoted 5 lines
??????????? Parameter: int gpio - GPIO PIN (Pin 0-63)
??????????? */
Quoted 7 lines
??????????? //omap_free_gpio((int)temp_pin->pin);
??????????? if (omap_request_gpio(temp_pin->pin)==0)
??????????? {
?????????????????
omap_set_gpio_direction(temp_pin->pin, 1);
//input=1//output=0
Quoted 4 lines
????????????????? pv.value =
omap_get_gpio_datain(temp_pin->pin);????????????????? printk(KERN_INFO "gpio get val (%lu ) to val %d\n",
temp_pin->pin,pv.value);
Quoted 2 lines
????????????????? if (copy_to_user(temp_pin, &pv, sizeof(struct
pin_value)) != 0)
Quoted 7 lines
??????????????????????? {
???????????????????????
ret_val= -1;??????????????????????? goto
ioctl_out;
Quoted 7 lines
??????????????????????? }
??????????????????????? omap_free_gpio((int)temp_pin->pin);
??????????????????????? ?//ret_val = pv.value;
??????????????????????? //copy_to_user(temp_pin, &pv, sizeof(struct
pin_value));
Quoted 6 lines
??????????? }
??????????? else{
??????????????????????? printk(KERN_INFO "gpio not free(%lu )\n",
temp_pin->pin);
Quoted 9 lines
?????????????????
ret_val= -1;????????????????? goto
ioctl_out;????????????????? }
????? break;
Quoted 7 lines
??? case
IOCTL_SET_PIN_INPUT:?????
temp_pin= (struct pin_value*)ioctl_param;????? if (omap_request_gpio(temp_pin->pin)==0)
????? ???????????
omap_set_gpio_direction(temp_pin->pin, temp_pin->value);
//input=1//output=0
Quoted 4 lines
????? else{
????????????????? printk(KERN_INFO "gpio not free(%lu )\n",
temp_pin->pin);
Quoted 79 lines
???????????
ret_val= -1;??????????? goto
ioctl_out;??????????? }
???? break;
? }
ioctl_out:? //up(&sw_sem);
? return
ret_val;}
struct
file_operationsour_file_ops= {? .ioctl =
device_ioctl,? .open =
device_open,? .release =
device_release,? .owner =
THIS_MODULE,};
int
init_module(){
? int
ret_val;?
ret_val=register_chrdev(MAJOR_NUM, DEVICE_NAME, &our_file_ops);? if (
ret_val< 0)? {
???
printk(KERN_ALERT "device %s failed(%d)\n", DEVICE_NAME, ret_val);??? return
ret_val;? }
? ???
sema_init(&sw_sem, 1);? ???
printk(KERN_INFO "mknod /dev/%s c %d 0\n", DEVICE_NAME, MAJOR_NUM);/*
?????
omap_cfg_reg(MUX1_1_GPIO113);?????
omap_cfg_reg(MUX1_2_GPIO114);?????
omap_cfg_reg(MUX1_3_GPIO115);
Quoted 5 lines
????? ret =
omap_request_gpio(MUX1_1_GPIO113);????? if (ret < 0)
??????????? printk(KERN_ERR "
SELECT_MUX1_1: can't reserve GPIO:%d !\n",
MUX1_1_GPIO113);
Quoted 6 lines
????? ret =
omap_request_gpio(MUX1_2_GPIO114);????? if (ret < 0)
??????????? printk(KERN_ERR "
SELECT_MUX1_2: can't reserve GPIO:%d !\n",
MUX1_2_GPIO114);
Quoted 6 lines
????? ret =
omap_request_gpio(MUX1_3_GPIO115);????? if (ret < 0)
??????????? printk(KERN_ERR "
SELECT_MUX1_3: can't reserve GPIO:%d !\n",
MUX1_3_GPIO115);
Quoted 41 lines
*/
? return 0;
}
void
cleanup_module(){
?
unregister_chrdev(MAJOR_NUM, DEVICE_NAME);}
Regard Doron Sandroy
From: TAO HU [mailto:tghk48 at motorola.com]
Sent: Monday, March 08, 2010 8:45 AM
To: doron
Subject: Re: kernel 2.6.22.18 omap qpioAre you using OMAP processor?
Can you post the piece of code so people can help
Quoted 7 lines
On Wed, Mar 3, 2010 at 4:25 AM, doron <[email protected]> wrote:
Hi all
I wrote an driver ?to the activation of " GPIO " according to the kernel
?instructions (gpio.txt) and when I request to free the GPIO I receive always that the GPIO is reserved .
Quoted 21 lines
What the required steps in order to toggle the GPIO MUXED and not MUXED
Regards? Doron Sandroy
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel at lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Quoted 4 lines
--
Best Regards
Hu Tao
--
Best Regards
Hu Tao