* kernel 2.6.22.18 omap qpio
@ 2010-03-02 20:25 doron
[not found] ` <5f4a33681003072245h37d9c78ekb4f67b23840d20a7@mail.gmail.com>
0 siblings, 1 reply; 4+ messages in thread
From: doron @ 2010-03-02 20:25 UTC (permalink / raw)
To: linux-arm-kernel
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>
^ permalink raw reply [flat|nested] 4+ messages in thread[parent not found: <5f4a33681003072245h37d9c78ekb4f67b23840d20a7@mail.gmail.com>]
* kernel 2.6.22.18 omap qpio [not found] ` <5f4a33681003072245h37d9c78ekb4f67b23840d20a7@mail.gmail.com> @ 2010-03-08 8:42 ` doron 2010-03-08 9:14 ` TAO HU 0 siblings, 1 reply; 4+ messages in thread From: doron @ 2010-03-08 8:42 UTC (permalink / raw) To: linux-arm-kernel 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_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 <doronsa@gmail.com> 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 -- 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> ^ permalink raw reply [flat|nested] 4+ messages in thread
* kernel 2.6.22.18 omap qpio 2010-03-08 8:42 ` doron @ 2010-03-08 9:14 ` TAO HU 2010-03-08 9:32 ` doron 0 siblings, 1 reply; 4+ messages in thread From: TAO HU @ 2010-03-08 9:14 UTC (permalink / raw) To: linux-arm-kernel 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 be omap_cfg_reg(MUX1_1_GPIO113); ... ... ret = omap_request_gpio(113); On Mon, Mar 8, 2010 at 4:42 PM, doron <doronsa@gmail.com> wrote: > > 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_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 <doronsa@gmail.com> 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 > > > -- > Best Regards > Hu Tao > -- Best Regards Hu Tao ^ permalink raw reply [flat|nested] 4+ messages in thread
* kernel 2.6.22.18 omap qpio 2010-03-08 9:14 ` TAO HU @ 2010-03-08 9:32 ` doron 0 siblings, 0 replies; 4+ messages in thread From: doron @ 2010-03-08 9:32 UTC (permalink / raw) To: linux-arm-kernel 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 be omap_cfg_reg(MUX1_1_GPIO113); ... ... ret = omap_request_gpio(113); On Mon, Mar 8, 2010 at 4:42 PM, doron <doronsa@gmail.com> wrote: > > 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_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 <doronsa@gmail.com> 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 > > > -- > Best Regards > Hu Tao > -- Best Regards Hu Tao ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-03-08 9:32 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-02 20:25 kernel 2.6.22.18 omap qpio doron
[not found] ` <5f4a33681003072245h37d9c78ekb4f67b23840d20a7@mail.gmail.com>
2010-03-08 8:42 ` doron
2010-03-08 9:14 ` TAO HU
2010-03-08 9:32 ` doron
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).