Exemplo n.º 1
0
/**
 * \brief Low power application entry point.
 *
 * \return Unused (ANSI-C compatibility).
 */
int main(void)
{
	/* Initialize the SAM system */
	sysclk_init();
	g_ul_current_mck = sysclk_get_cpu_hz();
	board_init();

	/* Initialize the console uart */
	configure_console();

	/* Output example information */
	puts(STRING_HEADER);

	/* Initialize the chip for the power consumption test */
	init_chip();

	/* Set default clock and re-configure UART */
	set_default_working_clock();
	reconfigure_console(g_ul_current_mck, CONF_UART_BAUDRATE);

	/* Test core consumption */
	test_core();

	while (1) {
	}
}
Exemplo n.º 2
0
void init_bus(struct bus *p_bus)
{
	int i;

	p_bus->chips = &nand_mem_pointer.chip[nand_mem_pointer.buses * CHIPS_PER_BUS];
	nand_mem_pointer.buses++;

	for (i = 0; i < CHIPS_PER_BUS; i++)
	{
		init_chip(&p_bus->chips[i]);
	}
}
Exemplo n.º 3
0
int pxa3xx_wm9713l_snd_init(void)
{
	int err;

	err = init_chip();
	if (err)
		return err;

	snd_pw_on();

	/*
	 * PLL
	 */
	/* initialise PLL when appropriate - do not forget to power on PLL */

	/*
	 * Capture path
	 */
	/* Turn on MIC1 only */
	pxa2xx_ac97_write(0, WM9713L_MIC_BIAS, 0xc440);
	/* Select MUX source: MICA for both channels; no boost; no path to phone mixer */
	pxa2xx_ac97_write(0, WM9713L_REC_ROUTE_MUX_SEL, 0xd600);

	/*
	 * Playback path
	 */
	/* Unmute to phones mixer only; 0dB gain */
	pxa2xx_ac97_write(0, WM9713L_DAC_PGA_VOL_ROUTE, 0x6808);
	/* mono, spk, out <- disable; hp <- hpmix */
	pxa2xx_ac97_write(0, WM9713L_OUTPUT_PGA_MUX, 0xffaf);

	/*
	 * Playbacl/Capture rates
	 */
	/* Enable variable rate audio */
	pxa2xx_ac97_write(0, AC97_EXTENDED_STATUS, 0x1);
	/* Set rates */
	pxa2xx_ac97_write(0, WM9713L_AUDIO_DAC_RATE, 44100); /* 0x2c */
	pxa2xx_ac97_write(0, WM9713L_AUDIO_ADC_RATE, 16000); /* 0x32 */

	return 0;
}
Exemplo n.º 4
0
int pxa3xx_wm9713l_ts_init(void)
{
	int err;

	err = init_chip();
	if (err)
		return err;

	ts_pw_on();

	pxa2xx_ac97_write(0, WM9713L_DIGITIZER_3_WM13, 0xc008);

	pxa2xx_ac97_modify_register(0, WM9713L_GPIO_PIN_CFG, 0x4, 0);
	pxa2xx_ac97_modify_register(0, WM9713L_GPIO_PIN_SHARING, 0x4, 0);

	pxa2xx_ac97_modify_register(0, WM9713L_GPIO_PIN_WAKEUP, 0, 0x2000);
	pxa2xx_ac97_modify_register(0, WM9713L_GPIO_PIN_STICKY, 0, 0x2000);

	return 0;
}
Exemplo n.º 5
0
void init_arch(void) {
    init_chip();
}
Exemplo n.º 6
0
int main(int argc, char **argv) {

	struct i2c_client cliente;
	int retval;
	struct uinput_user_dev uidev;
	
	if (argc<3) {
		printf("Version 7\n");
		printf("Format: driver [-res XxY] [-gpio PATH] [-invert_x] [-invert_y] DEVICE FW_FILE\n\n");
		printf("-res XxY: specifies that the screen resolution is X width and Y height (default: 800x480)\n");
		printf("-gpio PATH: sets the path to the GPIO device that enables and disables the touch chip\n");
		printf("-invert_x: inverts the X coordinates\n");
		printf("-invert_y: inverts the Y coordinates\n");
		printf("-new_scroll: do scroll with a single finger\n");
		printf("DEVICE: path to the I2C device where the GSLx680 chip is connected\n");
		printf("FW_FILE: path to the firmware file for the GSLx680 chip\n");
		return 0;
	}

	char *adapter=NULL;
	char *firmware=NULL;
	char *option;
	cliente.invert_x=0;
	cliente.invert_y=0;
	cliente.gpio="/sys/devices/virtual/misc/sun4i-gpio/pin/pb3";
	cliente.resx=SCREEN_MAX_X;
	cliente.resy=SCREEN_MAX_Y;

#ifdef USE_FB
	int fb_dev;
	fb_dev=open("/dev/fb0",O_RDWR);
	if (fb_dev>0) {
		struct fb_var_screeninfo vinfo;
		if (0==ioctl (fb_dev, FBIOGET_VSCREENINFO, &vinfo)) {
			cliente.resx=vinfo.xres;
			cliente.resy=vinfo.yres;
	    }
	    close(fb_dev);
	}
#endif

	int loop=1;
	while(loop<argc) {
		option=argv[loop];
		loop++;
		if (option[0]=='-') {
			if (!strcmp(option,"-invert_x")) {
				cliente.invert_x=1;
				continue;
			}
			if (!strcmp(option,"-invert_y")) {
				cliente.invert_y=1;
				continue;
			}
			if (!strcmp(option,"-new_scroll")) {
				cliente.new_scroll=1;
				continue;
			}
			if (loop==argc) {
				printf("Error: option %s doesn't have parameters\n",option);
				return -1;
			}
			if (!strcmp(option,"-res")) {
				if (2!=sscanf(argv[loop],"%dx%d",&cliente.resx,&cliente.resy)) {
					printf("Error: resolution %s has an incorrect format\n",argv[loop]);
					return -1;
				}
				loop++;
				continue;
			}
			if (!strcmp(option,"-gpio")) {
				cliente.gpio=strdup(argv[loop]);
				loop++;
				continue;
			}
			printf("Unknown option %s\n",option);
			return -1;
		}
		if (adapter==NULL) {
			adapter=strdup(option);
			continue;
		}
		if (firmware==NULL) {
			firmware=strdup(option);
			continue;
		}
		printf("Too many parameters\n");
		return -1;
	}

	if (adapter==NULL) {
		printf("Missing adapter path\n");
		return -1;
	}

	if (firmware==NULL) {
		printf("Missing firmware path\n");
		return -1;
	}

	printf("Connecting to device %s, firmware %s\n",adapter,firmware);
	
	cliente.adapter=open(adapter,O_RDWR);
	if (cliente.adapter<0) {
		printf("Can't open device %s\n",adapter);
		return -1;
	}

	send_value(0,&cliente);
	usleep(100000);
	send_value(1,&cliente);

	if (ioctl(cliente.adapter, I2C_SLAVE, GSLX680_I2C_ADDR) < 0) {
		printf("Error selecting device %d\n",GSLX680_I2C_ADDR);
		return -2;
	}

	cliente.ufile=open("/dev/uinput", O_WRONLY | O_NONBLOCK);
	if (cliente.ufile<0) {
		cliente.ufile=open("/dev/input/uinput", O_WRONLY | O_NONBLOCK);
		if (cliente.ufile<0) {
			printf("Can't connect to UINPUT interface.\n");
			return -2;
		}
	}

	retval = ioctl(cliente.ufile, UI_SET_EVBIT, EV_KEY);
	retval = ioctl(cliente.ufile, UI_SET_KEYBIT, BTN_TOUCH);

	retval = ioctl(cliente.ufile, UI_SET_EVBIT, EV_ABS);
	retval = ioctl(cliente.ufile, UI_SET_ABSBIT, ABS_X);
	retval = ioctl(cliente.ufile, UI_SET_ABSBIT, ABS_Y);
	
	
	memset(&uidev, 0, sizeof(uidev));

	snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "gsl1680-uinput");
	uidev.id.bustype = BUS_I2C;
	uidev.id.vendor  = 0x1;
	uidev.id.product = 0x1;
	uidev.id.version = 1;
	uidev.absmin[ABS_X] = 0;
	uidev.absmax[ABS_X] = cliente.resx-1;
	uidev.absmin[ABS_Y] = 0;
	uidev.absmax[ABS_Y] = cliente.resy-1;
	retval = write(cliente.ufile, &uidev, sizeof(uidev));
	
	retval = ioctl(cliente.ufile, UI_DEV_CREATE);
	retval = ioctl(cliente.ufile, UI_SET_PROPBIT,INPUT_PROP_DIRECT);
	retval = ioctl(cliente.ufile, UI_SET_PROPBIT,INPUT_PROP_POINTER);

	cliente.mfile=open("/dev/uinput", O_WRONLY | O_NONBLOCK);
	if (cliente.mfile<0) {
		cliente.mfile=open("/dev/input/uinput", O_WRONLY | O_NONBLOCK);
		if (cliente.mfile<0) {
			printf("Can't connect to UINPUT interface.\n");
			return -2;
		}
	}

	/* When a device uses ABSolute pointing, the X server doesn't allows to also use RELative pointing.
	 * But we need it to allow scrolling and zooming, so we define another device, this time with only
	 * relative pointing.
	 * It also can emit the LEFT CONTROL key to emulate zoom in and zoom out (CTRL+vertical scroll)
	 * Finally, it allows to emit CONTROL+MENU key to interface with TabletWM
	 */

	retval = ioctl(cliente.mfile, UI_SET_EVBIT, EV_KEY);
	retval = ioctl(cliente.mfile, UI_SET_KEYBIT, BTN_LEFT);
	retval = ioctl(cliente.mfile, UI_SET_KEYBIT, BTN_RIGHT);
	retval = ioctl(cliente.mfile, UI_SET_KEYBIT, KEY_LEFTCTRL);
	retval = ioctl(cliente.mfile, UI_SET_KEYBIT, KEY_COMPOSE);

	retval = ioctl(cliente.mfile, UI_SET_EVBIT, EV_REL);
	retval = ioctl(cliente.mfile, UI_SET_RELBIT, REL_X);
	retval = ioctl(cliente.mfile, UI_SET_RELBIT, REL_Y);
	retval = ioctl(cliente.mfile, UI_SET_RELBIT, REL_WHEEL);
	retval = ioctl(cliente.mfile, UI_SET_RELBIT, REL_HWHEEL);
	
	memset(&uidev, 0, sizeof(uidev));
	snprintf(uidev.name, UINPUT_MAX_NAME_SIZE, "gsl1680-2-uinput");
	uidev.id.bustype = BUS_I2C;
	uidev.id.vendor  = 0x1;
	uidev.id.product = 0x2;
	uidev.id.version = 1;
	retval = write(cliente.mfile, &uidev, sizeof(uidev));
	
	retval = ioctl(cliente.mfile, UI_SET_PROPBIT,INPUT_PROP_POINTER);
	
	retval = ioctl(cliente.mfile, UI_DEV_CREATE);

	init_chip(&cliente,firmware);

	while(1) {
		read_coords(&cliente);
		usleep(20000); // do 50 reads per second
	}
}