/** * \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) { } }
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]); } }
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; }
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; }
void init_arch(void) { init_chip(); }
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 } }