Skip to content

Commit

Permalink
[PATCH] Corgi Touchscreen: Allow the driver to share the PMU
Browse files Browse the repository at this point in the history
The Corgi Touchscreen driver uses the PMU as an accurate timing source which
conflicts with its usage for performance monitoring.  This patch allows it to
be shared with other users such as oprofile.

Signed-off-by: Richard Purdie <rpurdie@rpsys.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Richard Purdie authored and Linus Torvalds committed Sep 7, 2005
1 parent 948e12f commit 347e484
Showing 1 changed file with 9 additions and 6 deletions.
15 changes: 9 additions & 6 deletions drivers/input/touchscreen/corgi_ts.c
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,8 @@ struct corgi_ts {

#define SyncHS() while((STATUS_HSYNC) == 0); while((STATUS_HSYNC) != 0);
#define CCNT(a) asm volatile ("mrc p14, 0, %0, C1, C0, 0" : "=r"(a))
#define CCNT_ON() {int pmnc = 1; asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
#define CCNT_OFF() {int pmnc = 0; asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(pmnc));}
#define PMNC_GET(x) asm volatile ("mrc p14, 0, %0, C0, C0, 0" : "=r"(x))
#define PMNC_SET(x) asm volatile ("mcr p14, 0, %0, C0, C0, 0" : : "r"(x))

#define WAIT_HS_400_VGA 7013U // 17.615us
#define WAIT_HS_400_QVGA 16622U // 41.750us
Expand Down Expand Up @@ -96,14 +96,17 @@ static unsigned long calc_waittime(void)

static int sync_receive_data_send_cmd(int doRecive, int doSend, unsigned int address, unsigned long wait_time)
{
unsigned long timer1 = 0, timer2, pmnc = 0;
int pos = 0;
unsigned long timer1 = 0, timer2;
int dosleep;

dosleep = !w100fb_get_blanking();

if (dosleep && doSend) {
CCNT_ON();
PMNC_GET(pmnc);
if (!(pmnc & 0x01))
PMNC_SET(pmnc | 0x01);

/* polling HSync */
SyncHS();
/* get CCNT */
Expand Down Expand Up @@ -134,8 +137,8 @@ static int sync_receive_data_send_cmd(int doRecive, int doSend, unsigned int add
CCNT(timer2);
}
corgi_ssp_ads7846_put(cmd);
if (dosleep)
CCNT_OFF();
if (dosleep && !(pmnc & 0x01))
PMNC_SET(pmnc);
}
return pos;
}
Expand Down

0 comments on commit 347e484

Please sign in to comment.