From mboxrd@z Thu Jan 1 00:00:00 1970 From: ryan@bluewatersys.com (Ryan Mallon) Date: Tue, 01 Sep 2009 08:33:54 +1200 Subject: AT91SAM9260: How to output PCK0 clock on a GPIO pin In-Reply-To: References: <4A9C0136.3080102@gabaedevelopment.com> <20090831233312.2d2a6676@realm> Message-ID: <4A9C33B2.9060002@bluewatersys.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org Pedro I. Sanchez wrote: > On Mon, 31 Aug 2009 23:33:12 +0400, Sergey Matyukevich > wrote: >> Hi, >> >>> And how do I turn on the PMC clocks for the GPIO? >> Assigning gpio pin PC6 to TIOB2 peripheral is only a part of the work. >> Timer counters may operate in different modes. Take a look at >> the datasheet for at91sam9260, timer counters are covered in chapter 34. >> It looks like 'waveform mode' is what you need (see 34.5.10, 34.5.11). >> Before you get desired output on PC6 pin you will have to turn on >> waveform operating mode for TIOB2 and to configure its wave shapes. >> >> Thanks, >> Sergey > > Thanks Sergey, > > So are the following statements correct? > > 1. The pck0 clock I've been playing with has nothing to do with the clock I > want on PC6 (TIOB2). > > 2. I have to use instead the "tc2_clk" as defined in > arch/arm/mach-at-91/at91sam9260.c. > > 3. I have to access the TC_CMR register directly to set things up. I mean, > there are no macros already defined to access these structures. Attached is a driver for outputting pwm's using the timer counters on the at91 (sorry its not a proper patch, but this is just hauled out of an old kernel we have). The driver is written for the 2.6.20 and does not use the new at91 timer counter library. I think it should be reasonably easy to port to the mainline kernel (if you want to do this for mainline inclusion, I'm happy to lend a hand). To output a pwm on PC6, add the following code to your board file: static struct at91_pwm_data pwm_data[] = { { .channel = 2, .clock_div = AT91_TC_SCLK, .period = 500000, /* Milliseconds */ .tiob_duty = 50, /* Percentage */ .tio = AT91_TIOB, }, }; and in your board init function: at91_add_device_pwm(pwm_data, ARRAY_SIZE(pwm_data)); The driver also exports the period, duty and raw ra, rb and rc counter values via sysfs. HTH, ~Ryan -- Bluewater Systems Ltd - ARM Technology Solution Centre Ryan Mallon Unit 5, Amuri Park Phone: +64 3 3779127 404 Barbadoes St Fax: +64 3 3779135 PO Box 13 889 Email: ryan at bluewatersys.com Christchurch, 8013 Web: http://www.bluewatersys.com New Zealand Freecall Australia 1800 148 751 USA 1800 261 2934 -------------- next part -------------- A non-text attachment was scrubbed... Name: at91_pwm.c Type: text/x-csrc Size: 13254 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: at91sam9260_devices.c Type: text/x-csrc Size: 3307 bytes Desc: not available URL: -------------- next part -------------- A non-text attachment was scrubbed... Name: board.h Type: text/x-chdr Size: 587 bytes Desc: not available URL: