Problem with i2c-pcf-epp module

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am having a problem getting the i2c-pcf-epp module working.

As a quick first question:
How can I confirm that my parallel port is in EPP mode?

Where I am up to.

I have patched and complied the kernel (I'm using 2.4.20) but need some help.

A few facts about me so you may know how to respond.
1)	I am not a computer programmer
2)	I cannot program in C to save my life
3)	I have built a parallel port to i2c adaptor circuit using a PCF8584 which I 
have plugged into my notebook parallel port.
4)	It isn't working and I am trying to find out why.
5)	Any help would be greatly appreciated.
6)	My biggest problem is I think I am getting a kernel oops every time 
modprobe i2c-pcf-epp fails

I have attached part of my log with debuging on a the very bottom of this 
post. Please ignore all the extra rubbish in there, that's just me trying to 
figure out what is going on.

This is what I think the problem is (the kernel oops at any rate)

In i2c-pcf-epp.c there is a function: 
 int __init i2c_pcfepp_init(void) 

under which is the block of code:

 if (pcf_epp_init(pepp) == 0) {
    int ret;
    if ( (ret = i2c_pcf_add_bus(&pcf_epp_ops)) < 0) {
        printk(KERN_WARNING "i2c_pcf_add_bus caused an error: %d\n",ret);
 	
	release_region(pepp->pe_base , 5);
      return ret;
    }
  } else {
    
    return -ENODEV;
  }
  printk(KERN_DEBUG "i2c-pcf-epp.o: found device at %#x.\n", pepp->pe_base);
  return 0;
}

I think the problem relates to 

	release_region(pepp->pe_base , 5);

Under normal circumstances this is not a problem but if the i2c_pcf_add_bus 
fails you will get an oops if you have an irq assigned.

I have tried the following modification and it works (meaning I don't get the 
oops). Looking at it a bit more though I think that between the if ( (ret = 
i2c_pcf_add_bus(&pcf_epp_ops)) < 0) and the return ret should simply be a 
call to 

		cleanup_module()

Could someone look over this and acknowledge and patch if necessary please.


Example code that doesn't give the oops

 if (pcf_epp_init(pepp) == 0) {
    int ret;
    if ( (ret = i2c_pcf_add_bus(&pcf_epp_ops)) < 0) {
      printk(KERN_WARNING "i2c_pcf_add_bus caused an error: %d\n",ret);
      	
      	
	if ( gpe.pe_irq > 0 ) {	
      		disable_irq(gpe.pe_irq);
		free_irq(gpe.pe_irq, &gpe);
	}
		
	release_region(pepp->pe_base , 5);
      return ret;
    }
  } else {
    
    return -ENODEV;
  }
  printk(KERN_DEBUG "i2c-pcf-epp.o: found device at %#x.\n", pepp->pe_base);
  return 0;
}


-- 
Best Regards,

David Price

---------------------
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: hw routines for PCF8584 EPP 
adapter registered.
Feb 12 14:42:10 c17008 kernel: Registering th new adaptor pcf_algo.id=20000
Feb 12 14:42:10 c17008 kernel: Just about to if ((i = 
pcf_init_8584(pcf_adap)))
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: pcf_init_8584
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Read control 0xff
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: PCF state 0xff
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Write control 0x88
Feb 12 14:42:10 c17008 kernel: set_pcf(adap, 1, I2C_PCF_PIN=80
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Read control 0xff
Feb 12 14:42:10 c17008 kernel: if (((temp = get_pcf(adap, 1)); temp=ff
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: PCF detection failed -- can't 
select S0 (0xff).
Feb 12 14:42:10 c17008 kernel:  pcf_init_8584(pcf_adap)=fffffffa
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: pcf_init_8584
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Read control 0xff
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: PCF state 0xff
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Write control 0x88
Feb 12 14:42:10 c17008 kernel: set_pcf(adap, 1, I2C_PCF_PIN=80
Feb 12 14:42:10 c17008 kernel: i2c-pcf-epp.o: Read control 0xff
Feb 12 14:42:10 c17008 kernel: if (((temp = get_pcf(adap, 1)); temp=ff
Feb 12 14:42:10 c17008 kernel: i2c-algo-pcf.o: PCF detection failed -- can't 
select S0 (0xff).
Feb 12 14:42:10 c17008 kernel:  about to return to i2c-pcf-epp i2c_pcfepp_init 
i=fffffffa
Feb 12 14:42:10 c17008 kernel: i2c_pcf_add_bus caused an error: -6
Feb 12 14:42:10 c17008 kernel: Just about to die &pepp->pr_base=e4960544
Feb 12 14:42:10 c17008 kernel:  rest of value pepp->pr_base=378
Feb 12 14:42:11 c17008 kernel: Unable to handle kernel paging request at 
virtual address e495fe3c
Feb 12 14:42:11 c17008 kernel:  printing eip:
Feb 12 14:42:11 c17008 kernel: c023b482
Feb 12 14:42:11 c17008 kernel: *pde = 23fae067
Feb 12 14:42:11 c17008 kernel: *pte = 00000000
Feb 12 14:42:11 c17008 kernel: Oops: 0000
Feb 12 14:42:11 c17008 kernel: CPU:    0
Feb 12 14:42:11 c17008 kernel: EIP:    0010:[<c023b482>]    Tainted: P
Feb 12 14:42:11 c17008 kernel: EFLAGS: 00010297
Feb 12 14:42:11 c17008 kernel: eax: e495fe3c   ebx: 0000000a   ecx: e495fe3c   
edx: fffffffe
Feb 12 14:42:11 c17008 kernel: esi: d5eb20de   edi: 00000000   ebp: ffffffff   
esp: dcf3beac
Feb 12 14:42:11 c17008 kernel: ds: 0018   es: 0018   ss: 0018
Feb 12 14:42:11 c17008 kernel: Process kdeinit (pid: 1321, stackpage=dcf3b000)
Feb 12 14:42:11 c17008 kernel: Stack: dcf3bef0 ffffffff 0000000a 00000000 
0000000a 0000000a 00000001 00000000
Feb 12 14:42:11 c17008 kernel:        ffffffff ffffffff e1e7c580 d5eb20dc 
00000007 c02e09e4 c023b657 d5eb20dc
Feb 12 14:42:11 c17008 kernel:        2a14df24 c0267419 dcf3bf18 c023b67f 
d5eb20dc c0267416 dcf3bf14 c010a560
Feb 12 14:42:11 c17008 kernel: Call Trace:    [<c023b657>] [<c023b67f>] 
[<c010a560>] [<c0161f33>] [<c015f4f1>]
Feb 12 14:42:11 c17008 kernel:   [<c013c3e3>] [<c01090ef>]
Feb 12 14:42:11 c17008 kernel:
Feb 12 14:42:11 c17008 kernel: Code: 80 38 00 74 07 40 4a 83 fa ff 75 f4 29 c8 
83 e7 10 89 c3 75



[Index of Archives]     [Linux Kernel]     [Linux Hardware Monitoring]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux