162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+
262306a36Sopenharmony_ci// Keytable for Xbox 360 Universal Media remote
362306a36Sopenharmony_ci// Copyright (c) 2021 Bastien Nocera <hadess@hadess.net>
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <media/rc-map.h>
662306a36Sopenharmony_ci#include <linux/module.h>
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci/*
962306a36Sopenharmony_ci * Manual for remote available at:
1062306a36Sopenharmony_ci * http://download.microsoft.com/download/b/c/e/bce76f3f-db51-4c98-b79d-b3d21e90ccc1/universalmediaremote_na_0609.pdf
1162306a36Sopenharmony_ci */
1262306a36Sopenharmony_cistatic struct rc_map_table xbox_360[] = {
1362306a36Sopenharmony_ci	{KEY_EJECTCD, 0x800f7428},
1462306a36Sopenharmony_ci	{KEY_HOMEPAGE, 0x800f7464},
1562306a36Sopenharmony_ci	{KEY_POWER, 0x800f740c},
1662306a36Sopenharmony_ci	{KEY_STOP, 0x800f7419},
1762306a36Sopenharmony_ci	{KEY_PAUSE, 0x800f7418},
1862306a36Sopenharmony_ci	{KEY_REWIND, 0x800f7415},
1962306a36Sopenharmony_ci	{KEY_FASTFORWARD, 0x800f7414},
2062306a36Sopenharmony_ci	{KEY_PREVIOUS, 0x800f741b},
2162306a36Sopenharmony_ci	{KEY_NEXT, 0x800f741a},
2262306a36Sopenharmony_ci	{KEY_PLAY, 0x800f7416},
2362306a36Sopenharmony_ci	{KEY_PROPS, 0x800f744f}, /* "Display" */
2462306a36Sopenharmony_ci	{KEY_BACK, 0x800f7423},
2562306a36Sopenharmony_ci	{KEY_MEDIA_TOP_MENU, 0x800f7424}, /* "DVD Menu" */
2662306a36Sopenharmony_ci	{KEY_ROOT_MENU, 0x800f7451}, /* "Title" */
2762306a36Sopenharmony_ci	{KEY_INFO, 0x800f740f},
2862306a36Sopenharmony_ci	{KEY_UP, 0x800f741e},
2962306a36Sopenharmony_ci	{KEY_LEFT, 0x800f7420},
3062306a36Sopenharmony_ci	{KEY_RIGHT, 0x800f7421},
3162306a36Sopenharmony_ci	{KEY_DOWN, 0x800f741f},
3262306a36Sopenharmony_ci	{KEY_OK, 0x800f7422},
3362306a36Sopenharmony_ci	{KEY_YELLOW, 0x800f7426},
3462306a36Sopenharmony_ci	{KEY_BLUE, 0x800f7468},
3562306a36Sopenharmony_ci	{KEY_GREEN, 0x800f7466},
3662306a36Sopenharmony_ci	{KEY_RED, 0x800f7425},
3762306a36Sopenharmony_ci	{KEY_VOLUMEUP, 0x800f7410},
3862306a36Sopenharmony_ci	{KEY_VOLUMEDOWN, 0x800f7411},
3962306a36Sopenharmony_ci	/* TV key doesn't light the IR LED */
4062306a36Sopenharmony_ci	{KEY_MUTE, 0x800f740e},
4162306a36Sopenharmony_ci	{KEY_CHANNELUP, 0x800f746c},
4262306a36Sopenharmony_ci	{KEY_CHANNELDOWN, 0x800f746d},
4362306a36Sopenharmony_ci	{KEY_LEFTMETA, 0x800f740d},
4462306a36Sopenharmony_ci	{KEY_ENTER, 0x800f740b},
4562306a36Sopenharmony_ci	{KEY_RECORD, 0x800f7417},
4662306a36Sopenharmony_ci	{KEY_CLEAR, 0x800f740a},
4762306a36Sopenharmony_ci	{KEY_NUMERIC_1, 0x800f7401},
4862306a36Sopenharmony_ci	{KEY_NUMERIC_2, 0x800f7402},
4962306a36Sopenharmony_ci	{KEY_NUMERIC_3, 0x800f7403},
5062306a36Sopenharmony_ci	{KEY_NUMERIC_4, 0x800f7404},
5162306a36Sopenharmony_ci	{KEY_NUMERIC_5, 0x800f7405},
5262306a36Sopenharmony_ci	{KEY_NUMERIC_6, 0x800f7406},
5362306a36Sopenharmony_ci	{KEY_NUMERIC_7, 0x800f7407},
5462306a36Sopenharmony_ci	{KEY_NUMERIC_8, 0x800f7408},
5562306a36Sopenharmony_ci	{KEY_NUMERIC_9, 0x800f7409},
5662306a36Sopenharmony_ci	{KEY_NUMERIC_0, 0x800f7400},
5762306a36Sopenharmony_ci	{KEY_102ND, 0x800f741d}, /* "100" */
5862306a36Sopenharmony_ci	{KEY_CANCEL, 0x800f741c},
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistatic struct rc_map_list xbox_360_map = {
6262306a36Sopenharmony_ci	.map = {
6362306a36Sopenharmony_ci		.scan     = xbox_360,
6462306a36Sopenharmony_ci		.size     = ARRAY_SIZE(xbox_360),
6562306a36Sopenharmony_ci		.rc_proto = RC_PROTO_RC6_MCE,
6662306a36Sopenharmony_ci		.name     = RC_MAP_XBOX_360,
6762306a36Sopenharmony_ci	}
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cistatic int __init init_rc_map(void)
7162306a36Sopenharmony_ci{
7262306a36Sopenharmony_ci	return rc_map_register(&xbox_360_map);
7362306a36Sopenharmony_ci}
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_cistatic void __exit exit_rc_map(void)
7662306a36Sopenharmony_ci{
7762306a36Sopenharmony_ci	rc_map_unregister(&xbox_360_map);
7862306a36Sopenharmony_ci}
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_cimodule_init(init_rc_map)
8162306a36Sopenharmony_cimodule_exit(exit_rc_map)
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ciMODULE_LICENSE("GPL");
84