コード例 #1
0
ファイル: simple_panel.c プロジェクト: koenkooi/u-boot
static int simple_panel_enable_backlight(struct udevice *dev)
{
	struct simple_panel_priv *priv = dev_get_priv(dev);
	int ret;

	debug("%s: start, backlight = '%s'\n", __func__, priv->backlight->name);
	dm_gpio_set_value(&priv->enable, 1);
	ret = backlight_enable(priv->backlight);
	debug("%s: done, ret = %d\n", __func__, ret);
	if (ret)
		return ret;

	return 0;
}
コード例 #2
0
void show_image(ppz_images image_name)
{
	int fallback = 1;
	enum omap_dispc_format fmt = OMAP_XRGB888_FMT;

	if(panel_has_enabled) {
		panel_enable(0);
		backlight_enable(0);
	}

	switch (image_name) {
		case boot:
			fmt = OMAP_RGB565_FMT;
			display_rle(_binary_boot_rle_start, (uint16_t *) FB, panel.xres, panel.yres);
			break;
		case lowbatt_charge:
			fmt = OMAP_RGB565_FMT;
			display_rle(_binary_lowbatt_charge_rle_start, (uint16_t *) FB, panel.xres, panel.yres);
			break;
		case connect_charge:
			display_mmc_gzip_ppm(1, 5, "connect_charge.ppz", (uint32_t *) FB, panel.xres, panel.yres);
			break;
		case cooldown:
			display_mmc_gzip_ppm(1, 5, "cooldown.ppz", (uint32_t *) FB, panel.xres, panel.yres);
			break;
		default:
			return -1;
	}


	panel_enable(1);
	display_init(&panel, (void *) FB, fmt);

	backlight_enable(1);
	backlight_set_brightness(0x3f);
	panel_has_enabled = 1;
}
コード例 #3
0
ファイル: mainboard.c プロジェクト: B-Rich/coreboot
static void mainboard_enable(device_t dev)
{
	/* Configure the MultiKey controller */
	// m3885_configure_multikey();

	/* Enable LCD Backlight */
	backlight_enable();

	/* Disable Dummy DCC -> GP45 = 1 */
	outb(inb(0x60f) | (1 << 5), 0x60f);

#if CONFIG_VGA_ROM_RUN
	/* Install custom int15 handler for VGA OPROM */
	mainboard_interrupt_handlers(0x15, &int15_handler);
#endif
#if DUMP_RUNTIME_REGISTERS
	dump_runtime_registers();
#endif
}
コード例 #4
0
ファイル: lcd_ok.c プロジェクト: bourne015/myCODES
void lcd_test(void)
{
	unsigned char c;
	static int lcdon = 0;
	static int blon = 0;
	static int dispon = 0;

	lcd_init();
	
	while (1)
	{
		printf("********LCD TEST MENU********\n\r");
		printf("[L] enable/disable LCD\n\r");
		printf("[B] enable/disable back light\n\r");
		printf("[C] enable/disable s3c6410 display controller\n\r");
		printf("[D] display color\n\r");
		printf("[Q] quit\n\r");

		do {
			c = getc();
			if (c == '\n' || c == '\r')
			{
				printf("\n\r");
			}
			else
			{
				putc(c);
			}
		} while (c == '\n' || c == '\r');

		switch (c) {
			case 'l':
			case 'L':
			{
				if (lcdon)
				{
					lcd_off();
					printf("LCD off\n\r");
				}
				else
				{
					lcd_on();
					printf("LCD on\n\r");
				}
				lcdon = !lcdon;
				break;
			}


			case 'b':
			case 'B':
			{
				if (blon)
				{
					backlight_disable();
					printf("Backlight off\n\r");
				}
				else
				{
					backlight_enable();
					printf("Backlight on\n\r");
				}
				blon = !blon;
				break;
			}


			case 'c':
			case 'C':
			{
				if (dispon)
				{
					displaycon_off();
					printf("Display controller off\n\r");
				}
				else
				{
					displaycon_on();
					printf("Display controller on\n\r");
				}
				blon = !blon;
				break;
			}

			case 'd':
			case 'D':
			{
				display_red();
				break;
			}

			case 'q':
			case 'Q':
			{
				return ;
				break;
			}

		}

	}
}
コード例 #5
0
ファイル: lcd.c プロジェクト: elliotxu/tiny6410
void lcd_init(void)
{
	/* 1. 设置相关GPIO引脚用于LCD */
	GPICON = 0xaaaaaaaa;  /* gpi0~gpi15用作lcd_vd[0~15] */
	GPJCON = 0xaaaaaaa;   /* gpj0~gpi11用作lcd */
	//GPFCON &= ~(0x3<<28);
	//GPFCON |=  (1<<28);    /* GPF14用作背光使能信号 */
	
	GPECON &= ~(0xf);
	GPECON |= (0x1);          /* GPE0用作LCD的on/off信号 */
	
	/* 2. 初始化6410的display controller 
	 * 2.1 hsync,vsync,vclk,vden的极性和时间参数
	 * 2.2 行数、列数(分辨率),象素颜色的格式
	 * 2.3 分配显存(frame buffer),写入display controller
	 */

	MIFPCON &= ~(1<<3);   /* Normal mode */

	SPCON    &= ~(0x3);
	SPCON    |= 0x1;            /* RGB I/F style */

#if 0
	VIDCON0 &= ~((3<<26) | (3<<17) | (0xff<<6));     /* RGB I/F, RGB Parallel format,  */
	VIDCON0 |= ((2<<6) | (1<<4) | (0x3<<2));      /* vclk== 27MHz Ext Clock input / (CLKVAL+1) = 27/3 = 9MHz */
#else
	VIDCON0 &= ~((3<<26) | (3<<17) | (0xff<<6)  | (3<<2));     /* RGB I/F, RGB Parallel format,  */
	VIDCON0 |= ((14<<6) | (1<<4) );      /* vclk== HCLK / (CLKVAL+1) = 133/15 = 9MHz */
#endif

	VIDCON1 &= ~(1<<7);   /* 在vclk的下降沿获取数据 */
	VIDCON1 |= ((1<<6) | (1<<5));  /* HSYNC高电平有效, VSYNC高电平有效, */

	VIDTCON0 = (VBPD << 16) | (VFPD << 8) | (VSPW << 0);
	VIDTCON1 = (HBPD << 16) | (HFPD << 8) | (HSPW << 0);
	VIDTCON2 = (LINEVAL << 11) | (HOZVAL << 0);

	WINCON0 &= ~(0xf << 2);
	WINCON0 |= (0x3<<2) | (1<<17);    /* 8 BPP (palletized), byte swap */

	VIDOSD0A = (LeftTopX<<11) | (LeftTopY << 0);
	VIDOSD0B = (RightBotX<<11) | (RightBotY << 0);
	VIDOSD0C = (LINEVAL + 1) * (HOZVAL + 1) / 4;

	VIDW00ADD0B0 = FRAME_BUFFER;
	VIDW00ADD1B0 =  (((HOZVAL + 1)*1 + 0) * (LINEVAL + 1)) & (0xffffff);
	                                /* VBASEL = VBASEU + (LINEWIDTH+OFFSIZE) x (LINEVAL+1) 
                          *        = 0 + (480*1 + 0) * 272
                          *        = 
	                     */
	//VIDW00ADD2 =  HOZVAL + 1;


	/* 设置调色板 */
	palette_init();	

	//pwm_set(2);
	backlight_enable();
								
	fb_base_addr = FRAME_BUFFER;
	xsize = HOZVAL + 1;
	ysize = LINEVAL + 1;
	bpp   = 8;

	clean_screem();
}
コード例 #6
0
int board_late_init(void)
{
	int bootmode = set_boot_mode();
	int display_painted =0; /* boot */
	enum omap_dispc_format fmt = OMAP_XRGB888_FMT;
	enum coolcharger_ppz_t coolcharger_ppz = get_coolcharger_ppz();

	if(coolcharger_ppz == COOLCHARGER_SHUTDOWN_NOACTION)
		return 0;
	else if(coolcharger_ppz == COOLCHARGER_INITONLY) {
		if(!panel_has_enabled) {
			fmt = OMAP_RGB565_FMT;
			memset((void *) FB, 0, (panel.xres * 2 * panel.yres));
			display_init(&panel, (void *) FB, fmt);
		}
		return 0;
	}


	switch(bootmode) {
	case EMMC_ANDROID:
		switch(coolcharger_ppz) {
		case COOLCHARGER_DISABLE:
			display_painted = 1;
			break;
		case COOLCHARGER_SHUTDOWN_COOLDOWN:
		case COOLCHARGER_SHUTDOWN_WARMUP:
			//if we have the warm up image, we can use it.
			disable_panel_backlight();
			display_mmc_gzip_ppm(1, 5, "cooldown.ppz", (uint32_t *) FB, panel.xres, panel.yres);
			break;
		}

		break;
	case EMMC_RECOVERY:
		if(boot_cooldown_charger_mode()) {
			disable_panel_backlight();
			switch(coolcharger_ppz) {
			case COOLCHARGER_COOLDOWN_MODE:
				display_mmc_gzip_ppm(1, 5, "cooldown.ppz", (uint32_t *) FB, panel.xres, panel.yres);
				break;
			case COOLCHARGER_CHARGER_MODE:
				fmt = OMAP_RGB565_FMT;
				display_rle(_binary_lowbatt_charge_rle_start, (uint16_t *) FB, panel.xres, panel.yres);
				break;
			}
		}
		else {
			if (!panel_has_enabled) /* recovery image is same as boot */
				show_image(boot);

			display_painted = 1;
		}
		break;
	case SD_UIMAGE:
	case SD_BOOTIMG:
	case USB_BOOTIMG:
	default:
		/* if we use PIC SD card to reflash and the SoC < BOOT_ANDROID
		 * the show_image will not be called. */
		if(!panel_has_enabled)
			show_image(boot);

		display_painted = 1;
		break;
	}

    if (display_painted == 0) {
	    panel_enable(1);
	    display_init(&panel, (void *) FB, fmt);

	    backlight_enable(1);
	    backlight_set_brightness(0x3f);
	    panel_has_enabled = 1;

	    if(coolcharger_ppz == COOLCHARGER_SHUTDOWN_COOLDOWN ||
	       coolcharger_ppz == COOLCHARGER_SHUTDOWN_WARMUP)
		    udelay(3000000);
	}

	return bootmode;
}
コード例 #7
0
void backlight_set(uint8_t level)
{
#ifdef FADING_LED_ENABLE
    backlight_mode = level;
#endif

#ifdef BREATHING_LED_ENABLE
    switch (level) {
        case 1:
        case 2:
        case 3:
#ifdef SOFTPWM_LED_ENABLE
            softpwm_led_enable();
#ifdef FADING_LED_ENABLE
            fading_led_disable_all();
#endif
            breathing_led_disable_all();
#else
            backlight_enable();
            breathing_led_disable();
#endif
            backlight_set_raw(pgm_read_byte(&backlight_table[level]));
            break;
        case 4:
        case 5:
        case 6:
#ifdef SOFTPWM_LED_ENABLE
            softpwm_led_enable();
#ifdef FADING_LED_ENABLE
            fading_led_disable_all();
#endif
            breathing_led_enable_all();
#else
            backlight_enable();
            breathing_led_enable();
#endif
            breathing_led_set_duration(6 - level);
            break;
#ifdef SOFTPWM_LED_ENABLE
#ifdef FADING_LED_ENABLE
        case 7:
            softpwm_led_enable();
            fading_led_enable_all();
            breathing_led_disable_all();
            fading_led_set_direction(FADING_LED_FADE_IN);
            fading_led_set_duration(3);
            break;
        case 8:
            softpwm_led_enable();
            fading_led_enable_all();
            breathing_led_disable_all();
            fading_led_set_direction(FADING_LED_FADE_OUT);
            fading_led_set_duration(3);
            break;
#endif
#endif
        case 0:
        default:
#ifdef SOFTPWM_LED_ENABLE
#ifdef FADING_LED_ENABLE
            fading_led_disable_all();
#endif
            breathing_led_disable_all();
            softpwm_led_disable();
#else
            breathing_led_disable();
            backlight_disable();
#endif
            break;
    }
#else
    if (level > 0) {
        backlight_enable();
        backlight_set_raw(pgm_read_byte(&backlight_table[level]));
    }
    else {
        backlight_disable();
    }
#endif

}
コード例 #8
0
ファイル: keymap.c プロジェクト: m5kR10bHxS/EasyAVR
void handle_code_actuate(const uint8_t code, const uint8_t action, const uint8_t tapkey)
{
	const uint8_t modaction = (action & MOD_ACTION_MASK);
	
	if (modaction)
	{
		g_autokey_modifier = modaction;
	}
	
	switch(code)
	{
	case HID_KEYBOARD_SC_A:
	case HID_KEYBOARD_SC_B:
	case HID_KEYBOARD_SC_C:
	case HID_KEYBOARD_SC_D:
	case HID_KEYBOARD_SC_E:
	case HID_KEYBOARD_SC_F:
	case HID_KEYBOARD_SC_G:
	case HID_KEYBOARD_SC_H:
	case HID_KEYBOARD_SC_I:
	case HID_KEYBOARD_SC_J:
	case HID_KEYBOARD_SC_K:
	case HID_KEYBOARD_SC_L:
	case HID_KEYBOARD_SC_M:
	case HID_KEYBOARD_SC_N:
	case HID_KEYBOARD_SC_O:
	case HID_KEYBOARD_SC_P:
	case HID_KEYBOARD_SC_Q:
	case HID_KEYBOARD_SC_R:
	case HID_KEYBOARD_SC_S:
	case HID_KEYBOARD_SC_T:
	case HID_KEYBOARD_SC_U:
	case HID_KEYBOARD_SC_V:
	case HID_KEYBOARD_SC_W:
	case HID_KEYBOARD_SC_X:
	case HID_KEYBOARD_SC_Y:
	case HID_KEYBOARD_SC_Z:
	case HID_KEYBOARD_SC_1_AND_EXCLAMATION:
	case HID_KEYBOARD_SC_2_AND_AT:
	case HID_KEYBOARD_SC_3_AND_HASHMARK:
	case HID_KEYBOARD_SC_4_AND_DOLLAR:
	case HID_KEYBOARD_SC_5_AND_PERCENTAGE:
	case HID_KEYBOARD_SC_6_AND_CARET:
	case HID_KEYBOARD_SC_7_AND_AMPERSAND:
	case HID_KEYBOARD_SC_8_AND_ASTERISK:
	case HID_KEYBOARD_SC_9_AND_OPENING_PARENTHESIS:
	case HID_KEYBOARD_SC_0_AND_CLOSING_PARENTHESIS:
	case HID_KEYBOARD_SC_ENTER:
	case HID_KEYBOARD_SC_ESCAPE:
	case HID_KEYBOARD_SC_BACKSPACE:
	case HID_KEYBOARD_SC_TAB:
	case HID_KEYBOARD_SC_SPACE:
	case HID_KEYBOARD_SC_MINUS_AND_UNDERSCORE:
	case HID_KEYBOARD_SC_EQUAL_AND_PLUS:
	case HID_KEYBOARD_SC_OPENING_BRACKET_AND_OPENING_BRACE:
	case HID_KEYBOARD_SC_CLOSING_BRACKET_AND_CLOSING_BRACE:
	case HID_KEYBOARD_SC_BACKSLASH_AND_PIPE:
	case HID_KEYBOARD_SC_NON_US_HASHMARK_AND_TILDE:
	case HID_KEYBOARD_SC_SEMICOLON_AND_COLON:
	case HID_KEYBOARD_SC_APOSTROPHE_AND_QUOTE:
	case HID_KEYBOARD_SC_GRAVE_ACCENT_AND_TILDE:
	case HID_KEYBOARD_SC_COMMA_AND_LESS_THAN_SIGN:
	case HID_KEYBOARD_SC_DOT_AND_GREATER_THAN_SIGN:
	case HID_KEYBOARD_SC_SLASH_AND_QUESTION_MARK:
	case HID_KEYBOARD_SC_CAPS_LOCK:
	case HID_KEYBOARD_SC_F1:
	case HID_KEYBOARD_SC_F2:
	case HID_KEYBOARD_SC_F3:
	case HID_KEYBOARD_SC_F4:
	case HID_KEYBOARD_SC_F5:
	case HID_KEYBOARD_SC_F6:
	case HID_KEYBOARD_SC_F7:
	case HID_KEYBOARD_SC_F8:
	case HID_KEYBOARD_SC_F9:
	case HID_KEYBOARD_SC_F10:
	case HID_KEYBOARD_SC_F11:
	case HID_KEYBOARD_SC_F12:
	case HID_KEYBOARD_SC_PRINT_SCREEN:
	case HID_KEYBOARD_SC_SCROLL_LOCK:
	case HID_KEYBOARD_SC_PAUSE:
	case HID_KEYBOARD_SC_INSERT:
	case HID_KEYBOARD_SC_HOME:
	case HID_KEYBOARD_SC_PAGE_UP:
	case HID_KEYBOARD_SC_DELETE:
	case HID_KEYBOARD_SC_END:
	case HID_KEYBOARD_SC_PAGE_DOWN:
	case HID_KEYBOARD_SC_RIGHT_ARROW:
	case HID_KEYBOARD_SC_LEFT_ARROW:
	case HID_KEYBOARD_SC_DOWN_ARROW:
	case HID_KEYBOARD_SC_UP_ARROW:
	case HID_KEYBOARD_SC_NUM_LOCK:
	case HID_KEYBOARD_SC_KEYPAD_SLASH:
	case HID_KEYBOARD_SC_KEYPAD_ASTERISK:
	case HID_KEYBOARD_SC_KEYPAD_MINUS:
	case HID_KEYBOARD_SC_KEYPAD_PLUS:
	case HID_KEYBOARD_SC_KEYPAD_ENTER:
	case HID_KEYBOARD_SC_KEYPAD_1_AND_END:
	case HID_KEYBOARD_SC_KEYPAD_2_AND_DOWN_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_3_AND_PAGE_DOWN:
	case HID_KEYBOARD_SC_KEYPAD_4_AND_LEFT_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_5:
	case HID_KEYBOARD_SC_KEYPAD_6_AND_RIGHT_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_7_AND_HOME:
	case HID_KEYBOARD_SC_KEYPAD_8_AND_UP_ARROW:
	case HID_KEYBOARD_SC_KEYPAD_9_AND_PAGE_UP:
	case HID_KEYBOARD_SC_KEYPAD_0_AND_INSERT:
	case HID_KEYBOARD_SC_KEYPAD_DOT_AND_DELETE:
	case HID_KEYBOARD_SC_NON_US_BACKSLASH_AND_PIPE:
	case HID_KEYBOARD_SC_APPLICATION:
	case HID_KEYBOARD_SC_POWER:
	case HID_KEYBOARD_SC_KEYPAD_EQUAL_SIGN:
	case HID_KEYBOARD_SC_F13:
	case HID_KEYBOARD_SC_F14:
	case HID_KEYBOARD_SC_F15:
	case HID_KEYBOARD_SC_F16:
	case HID_KEYBOARD_SC_F17:
	case HID_KEYBOARD_SC_F18:
	case HID_KEYBOARD_SC_F19:
	case HID_KEYBOARD_SC_F20:
	case HID_KEYBOARD_SC_F21:
	case HID_KEYBOARD_SC_F22:
	case HID_KEYBOARD_SC_F23:
	case HID_KEYBOARD_SC_F24:
#ifdef MACRO_RAM_SIZE
		if (g_recording_macro)
			record_stroke(code);
#endif /* MACRO_RAM_SIZE */
		alpha_down(code, action);
		break;
	case HID_KEYBOARD_SC_LOCKING_CAPS_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_CAPS_LOCK, g_modifier_state);
		break;
	case HID_KEYBOARD_SC_LOCKING_NUM_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_NUM_LOCK, g_modifier_state);
		break;
	case HID_KEYBOARD_SC_LOCKING_SCROLL_LOCK:
		queue_autokeys(HID_KEYBOARD_SC_SCROLL_LOCK, g_modifier_state);
		break;
#ifdef MAX_NUMBER_OF_BACKLIGHTS
	case SCANCODE_BL_DIMMER:
		backlight_dimmer();
		break;
	case SCANCODE_BL_MODE:
		backlight_mode();
		break;
	case SCANCODE_BL_ENABLE:
		backlight_enable();
		break;
#else
	case SCANCODE_BL_DIMMER:
		led_dimmer();
		break;
#endif /* MAX_NUMBER_OF_BACKLIGHTS */
#ifdef MACRO_RAM_SIZE
	case SCANCODE_PASSWORD1:
	case SCANCODE_PASSWORD2:
	case SCANCODE_PASSWORD3:
	case SCANCODE_PASSWORD4:
		if (!g_recording_macro)
			start_password_record(code);
		break;
#endif /* MACRO_RAM_SIZE */
	case SCANCODE_KEYLOCK:
		g_keylock_flag ^= 1;
		break;
	case SCANCODE_WINLOCK:
		g_winlock_flag ^= 1;
		if (g_winlock_flag == 0)
			led_host_off(LED_WIN_LOCK);
		else
			led_host_on(LED_WIN_LOCK);
		break;
	case SCANCODE_ESCGRAVE:
		break;
	case SCANCODE_BOOT:
		g_reset_requested = RESET_TO_BOOT;
		break;
	case SCANCODE_CONFIG:
		if (g_console_state == CONSOLE_IDLE)
			g_console_state = CONSOLE_MENU_MAIN;
		break;
	case SCANCODE_MUTE:
	case SCANCODE_VOL_INC:
	case SCANCODE_VOL_DEC:
	case SCANCODE_BASS_BOOST:
	case SCANCODE_NEXT_TRACK:
	case SCANCODE_PREV_TRACK:
	case SCANCODE_STOP:
	case SCANCODE_PLAY_PAUSE:
	case SCANCODE_BACK:
	case SCANCODE_FORWARD:
	case SCANCODE_MEDIA:
	case SCANCODE_MAIL:
	case SCANCODE_CALC:
	case SCANCODE_MYCOMP:
	case SCANCODE_SEARCH:
	case SCANCODE_BROWSER:
		set_media(code);
		break;
#ifdef ENABLE_MOUSE
	case SCANCODE_MOUSE1:
	case SCANCODE_MOUSE2:
	case SCANCODE_MOUSE3:
	case SCANCODE_MOUSE4:
	case SCANCODE_MOUSE5:
		set_mousebutton(code);
		break;
	case SCANCODE_MOUSEXR:
		g_mouse_req_X++;
		goto mousemove;
	case SCANCODE_MOUSEXL:
		g_mouse_req_X--;
		goto mousemove;
	case SCANCODE_MOUSEYU:
		g_mouse_req_Y--;
		goto mousemove;
	case SCANCODE_MOUSEYD:
		g_mouse_req_Y++;
	mousemove:
		if ((g_mouse_active == 0) || (g_mouse_multiply < g_double_tap_repeat))
			g_mouse_multiply = g_double_tap_repeat;
		break;
#endif /* ENABLE_MOUSE */
	case SCANCODE_M1:
	case SCANCODE_M2:
	case SCANCODE_M3:
	case SCANCODE_M4:
	case SCANCODE_M5:
	case SCANCODE_M6:
	case SCANCODE_M7:
	case SCANCODE_M8:
	case SCANCODE_M9:
	case SCANCODE_M10:
	case SCANCODE_M11:
	case SCANCODE_M12:
	case SCANCODE_M13:
	case SCANCODE_M14:
		play_macro(code);
		break;
#ifdef MACRO_RAM_SIZE
	case SCANCODE_MRAM_RECORD:
		toggle_macro_record();
		break;
	case SCANCODE_MRAM_PLAY:
		if (!g_recording_macro)
			queue_ram_macro(g_ram_macro, g_ram_macro_length);
		break;
#endif /* MACRO_RAM_SIZE */
	case HID_KEYBOARD_SC_LEFT_CONTROL:
	case HID_KEYBOARD_SC_LEFT_SHIFT:
	case HID_KEYBOARD_SC_LEFT_ALT:
	case HID_KEYBOARD_SC_LEFT_GUI:
	case HID_KEYBOARD_SC_RIGHT_CONTROL:
	case HID_KEYBOARD_SC_RIGHT_SHIFT:
	case HID_KEYBOARD_SC_RIGHT_ALT:
	case HID_KEYBOARD_SC_RIGHT_GUI:
		mod_down(code, action);
		break;
	case SCANCODE_FN:
	case SCANCODE_FN2:
	case SCANCODE_FN3:
	case SCANCODE_FN4:
	case SCANCODE_FN5:
	case SCANCODE_FN6:
	case SCANCODE_FN7:
	case SCANCODE_FN8:
	case SCANCODE_FN9:
		fn_down(code, action);
		break;
	default:
		report_event(EVENT_CODE_KEYMAP_INVALID_CODE, code, MODE_UPDATE);
		break;
	}
	
	g_last_keypress = code;
}