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

Re: XFree4.0x and Pismo touchpad



>> Similar issues happen with things like mirroring & multihead. Some chips
>> can do mirroring only (I have code for mach64 to do that), so in this
>> case, a single ioctl is enough to enable/disable it.
>
>You have code for mirroring on mach64? Do share :-)

Works with LT-G (wallstreet), not tested on anything else especially not on
rage Pro (which is usally real dual head, unless the LT-G),
Written by Dan Malek.


/* Experiment with PowerBook video output mode.
 * Dan Malek (dan@mvista.com)
 */
#include <sys/types.h>
#include <sys/time.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <stdio.h>

#define eieio() asm volatile ("eieio" : : : "memory")

main(int argc, char **argv)
{
	int	mem_fd, i;
	uint	immap_mem, *mem_word, orig;

	if ((mem_fd = open("/dev/mem", O_RDWR)) < 0) {
		perror("mem open");
		exit(2);
	}

	/* Map control registers of 3D LT on PowerBook Wallstreet.
	*/
	immap_mem = (uint)mmap(NULL, 128 * 1024, (PROT_READ | PROT_WRITE),
			MAP_SHARED, mem_fd, 0x827ff000);

	close(mem_fd);

	if ((int)immap_mem < 0) {
		perror("mmap");
		exit(1);
	}

	/* Pointer to LCD_GEN_CNTL.
	*/
	mem_word = (uint *)(immap_mem + 0xcd4);

	orig = *mem_word;
	printf("%08x\n", orig);

	/* Enable LCD (was by default) and CRT.
	*/
	*mem_word = (orig | 0x01000000);
	sleep(10);
	
	/* Enable CRT, disable LCD.
	*/
	*mem_word = ((orig & ~0x02000000) | 0x01000000);
	sleep(10);

	/* Enable LCD only.
	*/
	*mem_word = orig;

	exit(0);
}



Reply to: