FAQ •  Search •  Register •  Login 

All times are UTC + 1 hour [ DST ]




Post new topic Reply to topic  [ 7 posts ] 
Author Message
 Post subject: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Fri Feb 12, 2010 11:59 pm 
Offline

Joined: Tue Jul 10, 2007 8:27 pm
Posts: 3
I have experienced troubles with the touchscreen (atmel_tsadcc.c) driver using the AT91SAM9G45-EK and our SOM-9G45/M10 modules.

http://www.emacinc.com/som/som9g45.htm

The touchscreen we use is identical to the one on the evaluation kit.
The touchscreen seems to register spurious touch readings when the touchscreen is released.

It seems that the release (ATMEL_TSACC_NOCNT) interrupt is not occuring imediately after the release.

I would like to know if this is a know problem with the kernel driver and/or the AT91SAM9G45ES2 or AT91SAM9M10ES internal touchscreen controller.


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Sat Feb 13, 2010 10:53 am 
Offline
User avatar

Joined: Wed May 12, 2004 6:59 pm
Posts: 190
Location: Bergamo, Italia
Please let's start with the Atmel Eval Board AT91SAM9G45-EK ( because I can't test your SOM-9G45/M10 module :wink: ) then post your dmesg (just to understand which kernel are you using there), and describe better the 'spurious touch readings' behaviour.
Thank you

_________________
Marco Cavallini
Koan s.a.s. - Bergamo - ITALIA
Embedded and Real-Time Software Engineering
- Atmel Third Party Consultant
Tel. +39-(0)35-255.235 - Fax +39-178-223.9748
http://www.KoanSoftware.com | http://www.KaeilOS.com


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Mon Feb 15, 2010 6:17 pm 
Offline

Joined: Tue Jul 10, 2007 8:27 pm
Posts: 3
root@som9m10:~# dmesg

Linux version 2.6.30 (nferre@bendor) (gcc version 4.2.0 20070413 (prerelease) (CodeSourcery Sourcery G++ Lite 2007q1-10)) #1 Mon Nov 2 17:19:07 CET 2009
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Atmel AT91SAM9G45-EKES
Memory policy: ECC disabled, Data cache writeback
On node 0 totalpages: 32768
free_area_init_node: node 0, pgdat c0365f88, node_mem_map c037c000
Normal zone: 256 pages used for memmap
Normal zone: 0 pages reserved
Normal zone: 32512 pages, LIFO batch:7
Clocks: CPU 400 MHz, master 133 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock5 mtdparts=atmel_nand:128k(bootstrap)ro,256k(uboot)ro,128k(env1)ro,128k(env2)ro,2M(linux),-(roo
t) rw rootfstype=jffs2
NR_IRQS:192
AT91: 160 gpio irqs in 5 banks
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
console [ttyS0] enabled
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 128MB = 128MB total
Memory: 126208KB available (3080K code, 235K data, 112K init, 0K highmem)
Calibrating delay loop... 199.47 BogoMIPS (lpj=997376)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 296 bytes
NET: Registered protocol family 16
atmel_tcb: probe of atmel_tcb.0 failed with error -22
bio: create slab <bio-0> at 0
SCSI subsystem initialized
usbcore: registered new interface driver usbfs
usbcore: registered new interface driver hub
usbcore: registered new device driver usb
cfg80211: Calling CRDA to update world regulatory domain
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) (SUMMARY) �© 2001-2006 Red Hat, Inc.
msgmni has been set to 246
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered (default)
atmel_lcdfb atmel_lcdfb.0: 510KiB frame buffer at 77980000 (mapped at ffa00000)
atmel_lcdfb atmel_lcdfb.0: fb0: Atmel LCDC at 0x00500000 (mapped at c8858000), irq 23
atmel_usart.0: ttyS0 at MMIO 0xfeffee00 (irq = 1) is a ATMEL_SERIAL
atmel_usart.2: ttyS2 at MMIO 0xfff90000 (irq = 8) is a ATMEL_SERIAL
brd: module loaded
loop: module loaded
Driver 'sd' needs updating - please use bus_type methods
MACB_mii_bus: probed
eth0: Atmel MACB at 0xfffbc000 irq 25 (00:de:ad:be:ef:ff)
eth0: attached PHY driver [Davicom DM9161A] (mii_bus:phy_addr=ffffffff:00, irq=-1)
NAND device: Manufacturer ID: 0x2c, Chip ID: 0xaa (Micron NAND 256MiB 1,8V 8-bit)
AT91 NAND: 8-bit, Software ECC
Scanning device for bad blocks
Bad eraseblock 337 at 0x000002a20000
Bad eraseblock 427 at 0x000003560000
Bad eraseblock 596 at 0x000004a80000
Bad eraseblock 652 at 0x000005180000
Bad eraseblock 1273 at 0x000009f20000
Bad eraseblock 1809 at 0x00000e220000
6 cmdlinepart partitions found on MTD device atmel_nand
Creating 6 MTD partitions on "atmel_nand":
0x000000000000-0x000000020000 : "bootstrap"
0x000000020000-0x000000060000 : "uboot"
0x000000060000-0x000000080000 : "env1"
0x000000080000-0x0000000a0000 : "env2"
0x0000000a0000-0x0000002a0000 : "linux"
0x0000002a0000-0x000010000000 : "root"
atmel_spi atmel_spi.0: Atmel SPI Controller at 0xfffa4000 (irq 14)
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
atmel-ehci atmel-ehci: Atmel EHCI UHP HS
atmel-ehci atmel-ehci: new USB bus registered, assigned bus number 1
atmel-ehci atmel-ehci: irq 22, io mem 0x00800000
atmel-ehci atmel-ehci: USB 2.0 started, EHCI 1.00
usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb1: Product: Atmel EHCI UHP HS
usb usb1: Manufacturer: Linux 2.6.30 ehci_hcd
usb usb1: SerialNumber: atmel-ehci
usb usb1: configuration #1 chosen from 1 choice
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
at91_ohci at91_ohci: AT91 OHCI
at91_ohci at91_ohci: new USB bus registered, assigned bus number 2
at91_ohci at91_ohci: irq 22, io mem 0x00700000
usb usb2: New USB device found, idVendor=1d6b, idProduct=0001
usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
usb usb2: Product: AT91 OHCI
usb usb2: Manufacturer: Linux 2.6.30 ohci_hcd
usb usb2: SerialNumber: at91
usb usb2: configuration #1 chosen from 1 choice
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
atmel_usba_udc atmel_usba_udc: MMIO registers at 0xfff78000 mapped at c885c000
atmel_usba_udc atmel_usba_udc: FIFO at 0x00600000 mapped at c8900000
mice: PS/2 mouse device common for all mice
input: gpio-keys as /class/input/input0
atmel_tsadcc atmel_tsadcc: Master clock is set at: 133333333 Hz
atmel_tsadcc atmel_tsadcc: Prescaler is set at: 221
input: atmel touch screen controller as /class/input/input1
rtc-at91sam9 at91_rtt.0: rtc core: registered at91_rtt as rtc0
IRQ 1/rtc0: IRQF_DISABLED is not guaranteed on shared IRQs
i2c-gpio i2c-gpio.0: using pins 52 (SDA) and 53 (SCL)
Registered led device: d8
Registered led device: d6
Registered led device: d7
at_hdmac at_hdmac: Atmel AHB DMA Controller ( cpy slave ), 8 channels
Advanced Linux Sound Architecture Driver Version 1.0.20.
atmel_ac97c atmel_ac97c.0: Atmel AC97 controller at 0xc8880000, irq = 24
ALSA device list:
#0: Atmel AC97 controller
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
lib80211: common routines for IEEE802.11 drivers
lib80211_crypt: registered algorithm 'NULL'
rtc-at91sam9 at91_rtt.0: setting system clock to 2010-01-13 00:15:26 UTC (1263341726)
atmel_mci atmel_mci.0: Using dma0chan0 for DMA transfers
atmel_mci atmel_mci.0: Atmel MCI controller at 0xfff80000 irq 11, 1 slots
atmel_mci atmel_mci.1: Using dma0chan1 for DMA transfers
atmel_mci atmel_mci.1: Atmel MCI controller at 0xfffd0000 irq 29, 1 slots
VFS: Mounted root (jffs2 filesystem) on device 31:5.
Freeing init memory: 112K
eth0: link up (100/Full)

root@som9m10:~# ts_test
.
.
1266249598.909118: 192 139 7500
1266249598.922758: 193 139 7500
1266249598.936399: 193 140 7500
1266249598.950039: 193 140 7500
1266249598.963680: 193 141 7500
1266249598.977317: 193 141 7500
1266249599.004599: 215 69 7500
1266249599.004599: 215 69 7500
1266249599.018252: 404 -12 0

Note this is running with the prebuilt kernel on the EK. It says "root@som9m10" because it is running an EMAC OE filesystem.


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Wed Feb 17, 2010 3:19 pm 
Offline
User avatar

Joined: Wed May 12, 2004 6:59 pm
Posts: 190
Location: Bergamo, Italia
I suggest you to use an updated system like KaeilOS.
http://www.kaeilos.com/?q=download

Change default machine configuration (step 4) with
MACHINE ?= "at91sam9g45ek"

_________________
Marco Cavallini
Koan s.a.s. - Bergamo - ITALIA
Embedded and Real-Time Software Engineering
- Atmel Third Party Consultant
Tel. +39-(0)35-255.235 - Fax +39-178-223.9748
http://www.KoanSoftware.com | http://www.KaeilOS.com


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Tue Feb 23, 2010 6:34 pm 
Offline

Joined: Tue Jul 10, 2007 8:27 pm
Posts: 3
KaeilOS is a derivative of the dev branch of OE.

There seem to be no patches for the 2.6.32 kernel's touchscreen driver in the build system.

See attached diff which seems to revert the ATMEL experimental patches.



--- /home/michael/projects/som-9m10m/linux/linux-2.6.30-at91_svn/drivers/input/touchscreen/atmel_tsadcc.c.orig 2010-02-08 15:35:19.000000000 -0600
+++ atmel_tsadcc.c 2009-12-02 21:51:21.000000000 -0600
@@ -22,8 +22,6 @@
#include <linux/clk.h>
#include <linux/platform_device.h>
#include <linux/io.h>
-#include <mach/board.h>
-#include <mach/cpu.h>

/* Register definitions based on AT91SAM9RL64 preliminary draft datasheet */

@@ -38,9 +36,7 @@
#define ATMEL_TSADCC_LOWRES (1 << 4) /* Resolution selection */
#define ATMEL_TSADCC_SLEEP (1 << 5) /* Sleep mode */
#define ATMEL_TSADCC_PENDET (1 << 6) /* Pen Detect selection */
-#define ATMEL_TSADCC_PRES (1 << 7) /* Pressure Measurement Selection */
#define ATMEL_TSADCC_PRESCAL (0x3f << 8) /* Prescalar Rate Selection */
-#define ATMEL_TSADCC_EPRESCAL (0xff << 8) /* Prescalar Rate Selection (Extended) */
#define ATMEL_TSADCC_STARTUP (0x7f << 16) /* Start Up time */
#define ATMEL_TSADCC_SHTIM (0xf << 24) /* Sample & Hold time */
#define ATMEL_TSADCC_PENDBC (0xf << 28) /* Pen Detect debouncing time */
@@ -88,13 +84,7 @@
#define ATMEL_TSADCC_CDR4 0x40 /* Channel Data 4 */
#define ATMEL_TSADCC_CDR5 0x44 /* Channel Data 5 */

-#define ATMEL_TSADCC_XPOS 0x50
-#define ATMEL_TSADCC_Z1DAT 0x54
-#define ATMEL_TSADCC_Z2DAT 0x58
-
-#define PRESCALER_VAL(x) ((x) >> 8)
-
-#define ADC_DEFAULT_CLOCK 100000
+#define ADC_CLOCK 1000000

struct atmel_tsadcc {
struct input_dev *input;
@@ -134,7 +124,6 @@

input_report_key(input_dev, BTN_TOUCH, 0);
ts_dev->bufferedmeasure = 0;
- input_report_abs(input_dev, ABS_PRESSURE, 0);
input_sync(input_dev);

} else if (status & ATMEL_TSADCC_PENCNT) {
@@ -159,7 +148,6 @@
input_report_abs(input_dev, ABS_X, ts_dev->prev_absx);
input_report_abs(input_dev, ABS_Y, ts_dev->prev_absy);
input_report_key(input_dev, BTN_TOUCH, 1);
- input_report_abs(input_dev, ABS_PRESSURE, 7500);
input_sync(input_dev);
} else
ts_dev->bufferedmeasure = 1;
@@ -184,7 +172,6 @@
struct atmel_tsadcc *ts_dev;
struct input_dev *input_dev;
struct resource *res;
- struct at91_tsadcc_data *pdata = pdev->dev.platform_data;
int err = 0;
unsigned int prsc;
unsigned int reg;
@@ -217,14 +204,14 @@
goto err_free_dev;
}

- if (!request_mem_region(res->start, res->end - res->start + 1,
+ if (!request_mem_region(res->start, resource_size(res),
"atmel tsadcc regs")) {
dev_err(&pdev->dev, "resources is unavailable.\n");
err = -EBUSY;
goto err_free_dev;
}

- tsc_base = ioremap(res->start, res->end - res->start + 1);
+ tsc_base = ioremap(res->start, resource_size(res));
if (!tsc_base) {
dev_err(&pdev->dev, "failed to map registers.\n");
err = -ENOMEM;
@@ -255,12 +242,11 @@
input_dev->phys = ts_dev->phys;
input_dev->dev.parent = &pdev->dev;

- __set_bit(EV_ABS, input_dev->evbit);
+ input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+ input_dev->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
+
input_set_abs_params(input_dev, ABS_X, 0, 0x3FF, 0, 0);
input_set_abs_params(input_dev, ABS_Y, 0, 0x3FF, 0, 0);
- input_set_abs_params(input_dev, ABS_PRESSURE, 0, 15000, 0, 0);
-
- input_set_capability(input_dev, EV_KEY, BTN_TOUCH);

/* clk_enable() always returns 0, no need to check it */
clk_enable(ts_dev->clk);
@@ -268,37 +254,19 @@
prsc = clk_get_rate(ts_dev->clk);
dev_info(&pdev->dev, "Master clock is set at: %d Hz\n", prsc);

- if (!pdata)
- goto err_fail;
-
- if (!pdata->adc_clock)
- pdata->adc_clock = ADC_DEFAULT_CLOCK;
-
- prsc = (prsc / (2 * pdata->adc_clock)) - 1;
-
- /* saturate if this value is too high */
- if (cpu_is_at91sam9rl()) {
- if (prsc > PRESCALER_VAL(ATMEL_TSADCC_PRESCAL))
- prsc = PRESCALER_VAL(ATMEL_TSADCC_PRESCAL);
- } else {
- if (prsc > PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL))
- prsc = PRESCALER_VAL(ATMEL_TSADCC_EPRESCAL);
- }
-
- dev_info(&pdev->dev, "Prescaler is set at: %d\n", prsc);
+ prsc = prsc / ADC_CLOCK / 2 - 1;

reg = ATMEL_TSADCC_TSAMOD_TS_ONLY_MODE |
((0x00 << 5) & ATMEL_TSADCC_SLEEP) | /* Normal Mode */
((0x01 << 6) & ATMEL_TSADCC_PENDET) | /* Enable Pen Detect */
- (prsc << 8) |
- ((0x26 << 16) & ATMEL_TSADCC_STARTUP) |
- ((pdata->pendet_debounce << 28) & ATMEL_TSADCC_PENDBC);
+ ((prsc << 8) & ATMEL_TSADCC_PRESCAL) | /* PRESCAL */
+ ((0x13 << 16) & ATMEL_TSADCC_STARTUP) | /* STARTUP */
+ ((0x0F << 28) & ATMEL_TSADCC_PENDBC); /* PENDBC */

atmel_tsadcc_write(ATMEL_TSADCC_CR, ATMEL_TSADCC_SWRST);
atmel_tsadcc_write(ATMEL_TSADCC_MR, reg);
atmel_tsadcc_write(ATMEL_TSADCC_TRGR, ATMEL_TSADCC_TRGMOD_NONE);
- atmel_tsadcc_write(ATMEL_TSADCC_TSR,
- (pdata->ts_sample_hold_time << 24) & ATMEL_TSADCC_TSSHTIM);
+ atmel_tsadcc_write(ATMEL_TSADCC_TSR, (0x3 << 24) & ATMEL_TSADCC_TSSHTIM);

atmel_tsadcc_read(ATMEL_TSADCC_SR);
atmel_tsadcc_write(ATMEL_TSADCC_IER, ATMEL_TSADCC_PENCNT);
@@ -318,7 +286,7 @@
err_unmap_regs:
iounmap(tsc_base);
err_release_mem:
- release_mem_region(res->start, res->end - res->start + 1);
+ release_mem_region(res->start, resource_size(res));
err_free_dev:
input_free_device(ts_dev->input);
err_free_mem:
@@ -337,7 +305,7 @@

res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
iounmap(tsc_base);
- release_mem_region(res->start, res->end - res->start + 1);
+ release_mem_region(res->start, resource_size(res));

clk_disable(ts_dev->clk);
clk_put(ts_dev->clk);


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Wed Oct 20, 2010 10:34 am 
Offline

Joined: Wed Oct 20, 2010 10:08 am
Posts: 1
Hello,

I'm kind new at this stuff, but I would like to ask you a few questions.

Some background info of my project:
I have an at91sam9m10-g45-ek board.
I used the linux4SAM instructions in order to create my FS, etc.
So I created the buildroot-v23434 with linux-2.6.30 kernel and patched it with 2.6.30-at91-exp.4 patches.
My current problem is a touchscreen. The tslib tools are not working for me.I mean, then I'm running the ts_calibrate or ts_test - I can see the messages on the screen, but there is nothing happens while I'm pressing the screen. On the other hand, while I'm running some QT examples on the board, I can see and move the mouse pointer.
Here, I would try to put as much info as I can about environments and all other stuff:

#dmesg (the touchscreen part) is:
atmel_tsadcc atmel_tsadcc: Master clock is set at: 133333333 Hz
atmel_tsadcc atmel_tsadcc: Prescaler is set at: 82
input: atmel touch screen controller as /class/input/input0
# uname -a
Linux AT91SAM9 2.6.30 #17 Tue Oct 19 18:31:30 IST 2010 armv5tejl unknown
#./evtest /dev/input/event0
Input driver version is 1.0.0
Input device ID: bus 0x0 vendor 0x0 product 0x0 version 0x0
Input device name: "atmel touch screen controller"
Supported events:
Event type 0 (Sync)
Event type 1 (Key)
Event code 330 (Touch)
Event type 3 (Absolute)
Event code 0 (X)
Value 968
Min 0
Max 1023
Event code 1 (Y)
Value 1066
Min 0
Max 1023
Event code 24 (Pressure)
Value 7500
Min 0
Max 15000
Testing ... (interrupt to exit)
Event: time 4516.498714, type 3 (Absolute), code 0 (X), value 969
Event: time 4516.498747, -------------- Report Sync ------------
................................................................
# cat /etc/profile
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts

# cat /proc/bus/input/devices
I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="atmel touch screen controller"
P: Phys=atmel_tsadcc/input0
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=mouse0 event0
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003

In case someone will need more info, just let me know:)

I also tried to patch the plugin/input-raw.c file with several options but non of them solved my problem.
I tried the patch from Vojtech Pavlik, and another one, where the major change is in sizeof() instead the regular values.

Thanks in advance,
Daniel


Top
 Profile  
 
 Post subject: Re: AT91SAM9G45/9M10 Touchscreen Controller
PostPosted: Tue Feb 15, 2011 11:56 pm 
Offline

Joined: Mon Dec 06, 2010 5:25 pm
Posts: 1
How do I read from the touch device? I am trying to run without X11, with just Linux FrameBuffer. In my code when I do this:

open("/dev/input/event1", O)

or do this:

open("dev/input/touchscreen0", O_RDONLY);

the call never returns. What is wrong?

I can open /dev/mouse0, but the data coming back seems to be "mouse style" data, i.e. xDelta and yDelta values.

When I do "cat ./event1" I see a huge stream of data coming back when I touch the screen. Why can't I open this device and read this stream from my application?

Please help!

root@at91sam9m10g45ek:/dev/input# cat /proc/bus/input/devices
I: Bus=0019 Vendor=0001 Product=0001 Version=0100
N: Name="gpio-keys"
P: Phys=gpio-keys/input0
S: Sysfs=/class/input/input0
U: Uniq=
H: Handlers=kbd event0
B: EV=3
B: KEY=30000 0 0 0 0 1680 0 0 10000000

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="atmel touch screen controller"
P: Phys=atmel_tsadcc/input0
S: Sysfs=/class/input/input1
U: Uniq=
H: Handlers=mouse0 event1
B: EV=b
B: KEY=400 0 0 0 0 0 0 0 0 0 0
B: ABS=1000003


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 7 posts ] 

All times are UTC + 1 hour [ DST ]


Who is online

Users browsing this forum: Google [Bot] and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to: