# Copyright 2017 The Chromium OS Authors. All rights reserved.
# Distributed under the terms of the GNU General Public License v2

# Tag keyboard interfaces in Hammer/Wand/Whiskers USB bases as
# having new top row layout.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5022", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="502d", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="18d1", ATTRS{idProduct}=="5030", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"

# Brydge Keyboards have the new top row layout as well.
# Wallaby(old), Wallaby, Goanna
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{id/vendor}=="03f6", ATTRS{id/product}=="a001", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{id/vendor}=="3175", ATTRS{id/product}=="9000", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{id/vendor}=="3175", ATTRS{id/product}=="9100", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="2"


# Kata has new top row layout
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{id/vendor}=="046d", ATTRS{id/product}=="b35d", \
  ENV{FUNCTION_ROW_PHYSMAP}="c0224 c0227 c0232 c029f c0070 c006f c00cd c00e2 c00ea c00e9"
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{id/vendor}=="046d", ATTRS{id/product}=="408c", \
  ENV{FUNCTION_ROW_PHYSMAP}="c0224 c0227 c0232 c029f c0070 c006f c00cd c00e2 c00ea c00e9"

# LG USB Keyboard for Chrome OS (SK6822).
# This keyboard has original top row layout.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="04ca", ATTRS{idProduct}=="0082", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="1"

# Samsung USB Keyboard for Chrome OS (AA-SK4PCUB).
# This keyboard has original top row layout.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4e05", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="1"

# Dell USB Keyboard for Chrome OS (KB115 Keyboard, Model: KB69211).
# This keyboard has original top row layout.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="0461", ATTRS{idProduct}=="4e05", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="1"

# Belkin USB C Keyboard for Chrome OS (B2B190).
# This keyboard has original sequence of top row keys.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0190", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="1"

# Belkin USB C Wired Tablet Keyboard for Chrome OS (B2B191).
# This keyboard has original sequence of top row keys, even though they are
# arranged in an unconventional way.
SUBSYSTEM=="input", ENV{ID_INPUT_KEYBOARD}=="1", \
  ATTRS{idVendor}=="050d", ATTRS{idProduct}=="019b", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="1"

# Wilco keyboard (5220W-C) for Chrome OS
SUBSYSTEM=="input", \
  ATTRS{idVendor}=="413c", ATTRS{idProduct}=="2510", \
  ENV{CROS_KEYBOARD_TOP_ROW_LAYOUT}="3", \
  ENV{ID_INPUT_KEYBOARD}="1"
