diff --git a/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs b/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs
index 8621b3a52..388ebcc07 100644
--- a/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs
+++ b/src/Ryujinx.Input/Assigner/GamepadButtonAssigner.cs
@@ -10,15 +10,15 @@ namespace Ryujinx.Input.Assigner
     /// </summary>
     public class GamepadButtonAssigner : IButtonAssigner
     {
-        private IGamepad _gamepad;
+        private readonly IGamepad _gamepad;
 
         private GamepadStateSnapshot _currState;
 
         private GamepadStateSnapshot _prevState;
 
-        private JoystickButtonDetector _detector;
+        private readonly JoystickButtonDetector _detector;
 
-        private bool _forStick;
+        private readonly bool _forStick;
 
         public GamepadButtonAssigner(IGamepad gamepad, float triggerThreshold, bool forStick)
         {
@@ -35,7 +35,7 @@ namespace Ryujinx.Input.Assigner
             {
                 _currState = _gamepad.GetStateSnapshot();
                 _prevState = _currState;
-            }    
+            }
         }
 
         public void ReadInput()
@@ -116,7 +116,7 @@ namespace Ryujinx.Input.Assigner
 
         private class JoystickButtonDetector
         {
-            private Dictionary<GamepadButtonInputId, InputSummary> _stats;
+            private readonly Dictionary<GamepadButtonInputId, InputSummary> _stats;
 
             public JoystickButtonDetector()
             {
@@ -135,9 +135,8 @@ namespace Ryujinx.Input.Assigner
 
             public void AddInput(GamepadButtonInputId button, float value)
             {
-                InputSummary inputSummary;
 
-                if (!_stats.TryGetValue(button, out inputSummary))
+                if (!_stats.TryGetValue(button, out InputSummary inputSummary))
                 {
                     inputSummary = new InputSummary();
                     _stats.Add(button, inputSummary);
@@ -148,7 +147,7 @@ namespace Ryujinx.Input.Assigner
 
             public override string ToString()
             {
-                StringWriter writer = new StringWriter();
+                StringWriter writer = new();
 
                 foreach (var kvp in _stats)
                 {
diff --git a/src/Ryujinx.Input/Assigner/IButtonAssigner.cs b/src/Ryujinx.Input/Assigner/IButtonAssigner.cs
index 021736df4..76a9fece4 100644
--- a/src/Ryujinx.Input/Assigner/IButtonAssigner.cs
+++ b/src/Ryujinx.Input/Assigner/IButtonAssigner.cs
@@ -33,4 +33,4 @@ namespace Ryujinx.Input.Assigner
         /// <returns>The pressed button that was read</returns>
         string GetPressedButton();
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Assigner/KeyboardKeyAssigner.cs b/src/Ryujinx.Input/Assigner/KeyboardKeyAssigner.cs
index 23ae3655d..e52ef4a2c 100644
--- a/src/Ryujinx.Input/Assigner/KeyboardKeyAssigner.cs
+++ b/src/Ryujinx.Input/Assigner/KeyboardKeyAssigner.cs
@@ -5,7 +5,7 @@ namespace Ryujinx.Input.Assigner
     /// </summary>
     public class KeyboardKeyAssigner : IButtonAssigner
     {
-        private IKeyboard _keyboard;
+        private readonly IKeyboard _keyboard;
 
         private KeyboardStateSnapshot _keyboardState;
 
@@ -47,4 +47,4 @@ namespace Ryujinx.Input.Assigner
             return !ShouldCancel() ? keyPressed : "";
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/GamepadButtonInputId.cs b/src/Ryujinx.Input/GamepadButtonInputId.cs
index d1e4b9ac0..618f8d0a0 100644
--- a/src/Ryujinx.Input/GamepadButtonInputId.cs
+++ b/src/Ryujinx.Input/GamepadButtonInputId.cs
@@ -52,6 +52,6 @@
         SingleLeftTrigger1,
         SingleRightTrigger1,
 
-        Count
+        Count,
     }
 }
diff --git a/src/Ryujinx.Input/GamepadFeaturesFlag.cs b/src/Ryujinx.Input/GamepadFeaturesFlag.cs
index 87310a322..206b4ea11 100644
--- a/src/Ryujinx.Input/GamepadFeaturesFlag.cs
+++ b/src/Ryujinx.Input/GamepadFeaturesFlag.cs
@@ -23,6 +23,6 @@ namespace Ryujinx.Input
         /// Motion
         /// <remarks>Also named sixaxis</remarks>
         /// </summary>
-        Motion
+        Motion,
     }
 }
diff --git a/src/Ryujinx.Input/HLE/InputManager.cs b/src/Ryujinx.Input/HLE/InputManager.cs
index bc38cf5a2..6dba839b9 100644
--- a/src/Ryujinx.Input/HLE/InputManager.cs
+++ b/src/Ryujinx.Input/HLE/InputManager.cs
@@ -25,7 +25,7 @@ namespace Ryujinx.Input.HLE
         {
             return new NpadManager(KeyboardDriver, GamepadDriver, MouseDriver);
         }
-        
+
         public TouchScreenManager CreateTouchScreenManager()
         {
             if (MouseDriver == null)
@@ -48,6 +48,7 @@ namespace Ryujinx.Input.HLE
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
     }
diff --git a/src/Ryujinx.Input/HLE/NpadController.cs b/src/Ryujinx.Input/HLE/NpadController.cs
index 46c0fc33a..c193b45c2 100644
--- a/src/Ryujinx.Input/HLE/NpadController.cs
+++ b/src/Ryujinx.Input/HLE/NpadController.cs
@@ -8,7 +8,6 @@ using System;
 using System.Collections.Concurrent;
 using System.Numerics;
 using System.Runtime.CompilerServices;
-
 using CemuHookClient = Ryujinx.Input.Motion.CemuHook.Client;
 using ConfigControllerType = Ryujinx.Common.Configuration.Hid.ControllerType;
 
@@ -28,29 +27,28 @@ namespace Ryujinx.Input.HLE
             }
         }
 
-        private static readonly HLEButtonMappingEntry[] _hleButtonMapping = new HLEButtonMappingEntry[]
-        {
-            new HLEButtonMappingEntry(GamepadButtonInputId.A, ControllerKeys.A),
-            new HLEButtonMappingEntry(GamepadButtonInputId.B, ControllerKeys.B),
-            new HLEButtonMappingEntry(GamepadButtonInputId.X, ControllerKeys.X),
-            new HLEButtonMappingEntry(GamepadButtonInputId.Y, ControllerKeys.Y),
-            new HLEButtonMappingEntry(GamepadButtonInputId.LeftStick, ControllerKeys.LStick),
-            new HLEButtonMappingEntry(GamepadButtonInputId.RightStick, ControllerKeys.RStick),
-            new HLEButtonMappingEntry(GamepadButtonInputId.LeftShoulder, ControllerKeys.L),
-            new HLEButtonMappingEntry(GamepadButtonInputId.RightShoulder, ControllerKeys.R),
-            new HLEButtonMappingEntry(GamepadButtonInputId.LeftTrigger, ControllerKeys.Zl),
-            new HLEButtonMappingEntry(GamepadButtonInputId.RightTrigger, ControllerKeys.Zr),
-            new HLEButtonMappingEntry(GamepadButtonInputId.DpadUp, ControllerKeys.DpadUp),
-            new HLEButtonMappingEntry(GamepadButtonInputId.DpadDown, ControllerKeys.DpadDown),
-            new HLEButtonMappingEntry(GamepadButtonInputId.DpadLeft, ControllerKeys.DpadLeft),
-            new HLEButtonMappingEntry(GamepadButtonInputId.DpadRight, ControllerKeys.DpadRight),
-            new HLEButtonMappingEntry(GamepadButtonInputId.Minus, ControllerKeys.Minus),
-            new HLEButtonMappingEntry(GamepadButtonInputId.Plus, ControllerKeys.Plus),
+        private static readonly HLEButtonMappingEntry[] _hleButtonMapping = {
+            new(GamepadButtonInputId.A, ControllerKeys.A),
+            new(GamepadButtonInputId.B, ControllerKeys.B),
+            new(GamepadButtonInputId.X, ControllerKeys.X),
+            new(GamepadButtonInputId.Y, ControllerKeys.Y),
+            new(GamepadButtonInputId.LeftStick, ControllerKeys.LStick),
+            new(GamepadButtonInputId.RightStick, ControllerKeys.RStick),
+            new(GamepadButtonInputId.LeftShoulder, ControllerKeys.L),
+            new(GamepadButtonInputId.RightShoulder, ControllerKeys.R),
+            new(GamepadButtonInputId.LeftTrigger, ControllerKeys.Zl),
+            new(GamepadButtonInputId.RightTrigger, ControllerKeys.Zr),
+            new(GamepadButtonInputId.DpadUp, ControllerKeys.DpadUp),
+            new(GamepadButtonInputId.DpadDown, ControllerKeys.DpadDown),
+            new(GamepadButtonInputId.DpadLeft, ControllerKeys.DpadLeft),
+            new(GamepadButtonInputId.DpadRight, ControllerKeys.DpadRight),
+            new(GamepadButtonInputId.Minus, ControllerKeys.Minus),
+            new(GamepadButtonInputId.Plus, ControllerKeys.Plus),
 
-            new HLEButtonMappingEntry(GamepadButtonInputId.SingleLeftTrigger0, ControllerKeys.SlLeft),
-            new HLEButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger0, ControllerKeys.SrLeft),
-            new HLEButtonMappingEntry(GamepadButtonInputId.SingleLeftTrigger1, ControllerKeys.SlRight),
-            new HLEButtonMappingEntry(GamepadButtonInputId.SingleRightTrigger1, ControllerKeys.SrRight),
+            new(GamepadButtonInputId.SingleLeftTrigger0, ControllerKeys.SlLeft),
+            new(GamepadButtonInputId.SingleRightTrigger0, ControllerKeys.SrLeft),
+            new(GamepadButtonInputId.SingleLeftTrigger1, ControllerKeys.SlRight),
+            new(GamepadButtonInputId.SingleRightTrigger1, ControllerKeys.SrRight),
         };
 
         private class HLEKeyboardMappingEntry
@@ -65,150 +63,147 @@ namespace Ryujinx.Input.HLE
             }
         }
 
-        private static readonly HLEKeyboardMappingEntry[] KeyMapping = new HLEKeyboardMappingEntry[]
-        {
-            new HLEKeyboardMappingEntry(Key.A, 0x4),
-            new HLEKeyboardMappingEntry(Key.B, 0x5),
-            new HLEKeyboardMappingEntry(Key.C, 0x6),
-            new HLEKeyboardMappingEntry(Key.D, 0x7),
-            new HLEKeyboardMappingEntry(Key.E, 0x8),
-            new HLEKeyboardMappingEntry(Key.F, 0x9),
-            new HLEKeyboardMappingEntry(Key.G, 0xA),
-            new HLEKeyboardMappingEntry(Key.H, 0xB),
-            new HLEKeyboardMappingEntry(Key.I, 0xC),
-            new HLEKeyboardMappingEntry(Key.J, 0xD),
-            new HLEKeyboardMappingEntry(Key.K, 0xE),
-            new HLEKeyboardMappingEntry(Key.L, 0xF),
-            new HLEKeyboardMappingEntry(Key.M, 0x10),
-            new HLEKeyboardMappingEntry(Key.N, 0x11),
-            new HLEKeyboardMappingEntry(Key.O, 0x12),
-            new HLEKeyboardMappingEntry(Key.P, 0x13),
-            new HLEKeyboardMappingEntry(Key.Q, 0x14),
-            new HLEKeyboardMappingEntry(Key.R, 0x15),
-            new HLEKeyboardMappingEntry(Key.S, 0x16),
-            new HLEKeyboardMappingEntry(Key.T, 0x17),
-            new HLEKeyboardMappingEntry(Key.U, 0x18),
-            new HLEKeyboardMappingEntry(Key.V, 0x19),
-            new HLEKeyboardMappingEntry(Key.W, 0x1A),
-            new HLEKeyboardMappingEntry(Key.X, 0x1B),
-            new HLEKeyboardMappingEntry(Key.Y, 0x1C),
-            new HLEKeyboardMappingEntry(Key.Z, 0x1D),
+        private static readonly HLEKeyboardMappingEntry[] _keyMapping = {
+            new(Key.A, 0x4),
+            new(Key.B, 0x5),
+            new(Key.C, 0x6),
+            new(Key.D, 0x7),
+            new(Key.E, 0x8),
+            new(Key.F, 0x9),
+            new(Key.G, 0xA),
+            new(Key.H, 0xB),
+            new(Key.I, 0xC),
+            new(Key.J, 0xD),
+            new(Key.K, 0xE),
+            new(Key.L, 0xF),
+            new(Key.M, 0x10),
+            new(Key.N, 0x11),
+            new(Key.O, 0x12),
+            new(Key.P, 0x13),
+            new(Key.Q, 0x14),
+            new(Key.R, 0x15),
+            new(Key.S, 0x16),
+            new(Key.T, 0x17),
+            new(Key.U, 0x18),
+            new(Key.V, 0x19),
+            new(Key.W, 0x1A),
+            new(Key.X, 0x1B),
+            new(Key.Y, 0x1C),
+            new(Key.Z, 0x1D),
 
-            new HLEKeyboardMappingEntry(Key.Number1, 0x1E),
-            new HLEKeyboardMappingEntry(Key.Number2, 0x1F),
-            new HLEKeyboardMappingEntry(Key.Number3, 0x20),
-            new HLEKeyboardMappingEntry(Key.Number4, 0x21),
-            new HLEKeyboardMappingEntry(Key.Number5, 0x22),
-            new HLEKeyboardMappingEntry(Key.Number6, 0x23),
-            new HLEKeyboardMappingEntry(Key.Number7, 0x24),
-            new HLEKeyboardMappingEntry(Key.Number8, 0x25),
-            new HLEKeyboardMappingEntry(Key.Number9, 0x26),
-            new HLEKeyboardMappingEntry(Key.Number0, 0x27),
+            new(Key.Number1, 0x1E),
+            new(Key.Number2, 0x1F),
+            new(Key.Number3, 0x20),
+            new(Key.Number4, 0x21),
+            new(Key.Number5, 0x22),
+            new(Key.Number6, 0x23),
+            new(Key.Number7, 0x24),
+            new(Key.Number8, 0x25),
+            new(Key.Number9, 0x26),
+            new(Key.Number0, 0x27),
 
-            new HLEKeyboardMappingEntry(Key.Enter,        0x28),
-            new HLEKeyboardMappingEntry(Key.Escape,       0x29),
-            new HLEKeyboardMappingEntry(Key.BackSpace,    0x2A),
-            new HLEKeyboardMappingEntry(Key.Tab,          0x2B),
-            new HLEKeyboardMappingEntry(Key.Space,        0x2C),
-            new HLEKeyboardMappingEntry(Key.Minus,        0x2D),
-            new HLEKeyboardMappingEntry(Key.Plus,         0x2E),
-            new HLEKeyboardMappingEntry(Key.BracketLeft,  0x2F),
-            new HLEKeyboardMappingEntry(Key.BracketRight, 0x30),
-            new HLEKeyboardMappingEntry(Key.BackSlash,    0x31),
-            new HLEKeyboardMappingEntry(Key.Tilde,        0x32),
-            new HLEKeyboardMappingEntry(Key.Semicolon,    0x33),
-            new HLEKeyboardMappingEntry(Key.Quote,        0x34),
-            new HLEKeyboardMappingEntry(Key.Grave,        0x35),
-            new HLEKeyboardMappingEntry(Key.Comma,        0x36),
-            new HLEKeyboardMappingEntry(Key.Period,       0x37),
-            new HLEKeyboardMappingEntry(Key.Slash,        0x38),
-            new HLEKeyboardMappingEntry(Key.CapsLock,     0x39),
+            new(Key.Enter,        0x28),
+            new(Key.Escape,       0x29),
+            new(Key.BackSpace,    0x2A),
+            new(Key.Tab,          0x2B),
+            new(Key.Space,        0x2C),
+            new(Key.Minus,        0x2D),
+            new(Key.Plus,         0x2E),
+            new(Key.BracketLeft,  0x2F),
+            new(Key.BracketRight, 0x30),
+            new(Key.BackSlash,    0x31),
+            new(Key.Tilde,        0x32),
+            new(Key.Semicolon,    0x33),
+            new(Key.Quote,        0x34),
+            new(Key.Grave,        0x35),
+            new(Key.Comma,        0x36),
+            new(Key.Period,       0x37),
+            new(Key.Slash,        0x38),
+            new(Key.CapsLock,     0x39),
 
-            new HLEKeyboardMappingEntry(Key.F1,  0x3a),
-            new HLEKeyboardMappingEntry(Key.F2,  0x3b),
-            new HLEKeyboardMappingEntry(Key.F3,  0x3c),
-            new HLEKeyboardMappingEntry(Key.F4,  0x3d),
-            new HLEKeyboardMappingEntry(Key.F5,  0x3e),
-            new HLEKeyboardMappingEntry(Key.F6,  0x3f),
-            new HLEKeyboardMappingEntry(Key.F7,  0x40),
-            new HLEKeyboardMappingEntry(Key.F8,  0x41),
-            new HLEKeyboardMappingEntry(Key.F9,  0x42),
-            new HLEKeyboardMappingEntry(Key.F10, 0x43),
-            new HLEKeyboardMappingEntry(Key.F11, 0x44),
-            new HLEKeyboardMappingEntry(Key.F12, 0x45),
+            new(Key.F1,  0x3a),
+            new(Key.F2,  0x3b),
+            new(Key.F3,  0x3c),
+            new(Key.F4,  0x3d),
+            new(Key.F5,  0x3e),
+            new(Key.F6,  0x3f),
+            new(Key.F7,  0x40),
+            new(Key.F8,  0x41),
+            new(Key.F9,  0x42),
+            new(Key.F10, 0x43),
+            new(Key.F11, 0x44),
+            new(Key.F12, 0x45),
 
-            new HLEKeyboardMappingEntry(Key.PrintScreen, 0x46),
-            new HLEKeyboardMappingEntry(Key.ScrollLock,  0x47),
-            new HLEKeyboardMappingEntry(Key.Pause,       0x48),
-            new HLEKeyboardMappingEntry(Key.Insert,      0x49),
-            new HLEKeyboardMappingEntry(Key.Home,        0x4A),
-            new HLEKeyboardMappingEntry(Key.PageUp,      0x4B),
-            new HLEKeyboardMappingEntry(Key.Delete,      0x4C),
-            new HLEKeyboardMappingEntry(Key.End,         0x4D),
-            new HLEKeyboardMappingEntry(Key.PageDown,    0x4E),
-            new HLEKeyboardMappingEntry(Key.Right,       0x4F),
-            new HLEKeyboardMappingEntry(Key.Left,        0x50),
-            new HLEKeyboardMappingEntry(Key.Down,        0x51),
-            new HLEKeyboardMappingEntry(Key.Up,          0x52),
+            new(Key.PrintScreen, 0x46),
+            new(Key.ScrollLock,  0x47),
+            new(Key.Pause,       0x48),
+            new(Key.Insert,      0x49),
+            new(Key.Home,        0x4A),
+            new(Key.PageUp,      0x4B),
+            new(Key.Delete,      0x4C),
+            new(Key.End,         0x4D),
+            new(Key.PageDown,    0x4E),
+            new(Key.Right,       0x4F),
+            new(Key.Left,        0x50),
+            new(Key.Down,        0x51),
+            new(Key.Up,          0x52),
 
-            new HLEKeyboardMappingEntry(Key.NumLock,        0x53),
-            new HLEKeyboardMappingEntry(Key.KeypadDivide,   0x54),
-            new HLEKeyboardMappingEntry(Key.KeypadMultiply, 0x55),
-            new HLEKeyboardMappingEntry(Key.KeypadSubtract, 0x56),
-            new HLEKeyboardMappingEntry(Key.KeypadAdd,      0x57),
-            new HLEKeyboardMappingEntry(Key.KeypadEnter,    0x58),
-            new HLEKeyboardMappingEntry(Key.Keypad1,        0x59),
-            new HLEKeyboardMappingEntry(Key.Keypad2,        0x5A),
-            new HLEKeyboardMappingEntry(Key.Keypad3,        0x5B),
-            new HLEKeyboardMappingEntry(Key.Keypad4,        0x5C),
-            new HLEKeyboardMappingEntry(Key.Keypad5,        0x5D),
-            new HLEKeyboardMappingEntry(Key.Keypad6,        0x5E),
-            new HLEKeyboardMappingEntry(Key.Keypad7,        0x5F),
-            new HLEKeyboardMappingEntry(Key.Keypad8,        0x60),
-            new HLEKeyboardMappingEntry(Key.Keypad9,        0x61),
-            new HLEKeyboardMappingEntry(Key.Keypad0,        0x62),
-            new HLEKeyboardMappingEntry(Key.KeypadDecimal,  0x63),
+            new(Key.NumLock,        0x53),
+            new(Key.KeypadDivide,   0x54),
+            new(Key.KeypadMultiply, 0x55),
+            new(Key.KeypadSubtract, 0x56),
+            new(Key.KeypadAdd,      0x57),
+            new(Key.KeypadEnter,    0x58),
+            new(Key.Keypad1,        0x59),
+            new(Key.Keypad2,        0x5A),
+            new(Key.Keypad3,        0x5B),
+            new(Key.Keypad4,        0x5C),
+            new(Key.Keypad5,        0x5D),
+            new(Key.Keypad6,        0x5E),
+            new(Key.Keypad7,        0x5F),
+            new(Key.Keypad8,        0x60),
+            new(Key.Keypad9,        0x61),
+            new(Key.Keypad0,        0x62),
+            new(Key.KeypadDecimal,  0x63),
 
-            new HLEKeyboardMappingEntry(Key.F13, 0x68),
-            new HLEKeyboardMappingEntry(Key.F14, 0x69),
-            new HLEKeyboardMappingEntry(Key.F15, 0x6A),
-            new HLEKeyboardMappingEntry(Key.F16, 0x6B),
-            new HLEKeyboardMappingEntry(Key.F17, 0x6C),
-            new HLEKeyboardMappingEntry(Key.F18, 0x6D),
-            new HLEKeyboardMappingEntry(Key.F19, 0x6E),
-            new HLEKeyboardMappingEntry(Key.F20, 0x6F),
-            new HLEKeyboardMappingEntry(Key.F21, 0x70),
-            new HLEKeyboardMappingEntry(Key.F22, 0x71),
-            new HLEKeyboardMappingEntry(Key.F23, 0x72),
-            new HLEKeyboardMappingEntry(Key.F24, 0x73),
+            new(Key.F13, 0x68),
+            new(Key.F14, 0x69),
+            new(Key.F15, 0x6A),
+            new(Key.F16, 0x6B),
+            new(Key.F17, 0x6C),
+            new(Key.F18, 0x6D),
+            new(Key.F19, 0x6E),
+            new(Key.F20, 0x6F),
+            new(Key.F21, 0x70),
+            new(Key.F22, 0x71),
+            new(Key.F23, 0x72),
+            new(Key.F24, 0x73),
 
-            new HLEKeyboardMappingEntry(Key.ControlLeft,  0xE0),
-            new HLEKeyboardMappingEntry(Key.ShiftLeft,    0xE1),
-            new HLEKeyboardMappingEntry(Key.AltLeft,      0xE2),
-            new HLEKeyboardMappingEntry(Key.WinLeft,      0xE3),
-            new HLEKeyboardMappingEntry(Key.ControlRight, 0xE4),
-            new HLEKeyboardMappingEntry(Key.ShiftRight,   0xE5),
-            new HLEKeyboardMappingEntry(Key.AltRight,     0xE6),
-            new HLEKeyboardMappingEntry(Key.WinRight,     0xE7),
+            new(Key.ControlLeft,  0xE0),
+            new(Key.ShiftLeft,    0xE1),
+            new(Key.AltLeft,      0xE2),
+            new(Key.WinLeft,      0xE3),
+            new(Key.ControlRight, 0xE4),
+            new(Key.ShiftRight,   0xE5),
+            new(Key.AltRight,     0xE6),
+            new(Key.WinRight,     0xE7),
         };
 
-        private static readonly HLEKeyboardMappingEntry[] KeyModifierMapping = new HLEKeyboardMappingEntry[]
-        {
-            new HLEKeyboardMappingEntry(Key.ControlLeft,  0),
-            new HLEKeyboardMappingEntry(Key.ShiftLeft,    1),
-            new HLEKeyboardMappingEntry(Key.AltLeft,      2),
-            new HLEKeyboardMappingEntry(Key.WinLeft,      3),
-            new HLEKeyboardMappingEntry(Key.ControlRight, 4),
-            new HLEKeyboardMappingEntry(Key.ShiftRight,   5),
-            new HLEKeyboardMappingEntry(Key.AltRight,     6),
-            new HLEKeyboardMappingEntry(Key.WinRight,     7),
-            new HLEKeyboardMappingEntry(Key.CapsLock,     8),
-            new HLEKeyboardMappingEntry(Key.ScrollLock,   9),
-            new HLEKeyboardMappingEntry(Key.NumLock,      10),
+        private static readonly HLEKeyboardMappingEntry[] _keyModifierMapping = {
+            new(Key.ControlLeft,  0),
+            new(Key.ShiftLeft,    1),
+            new(Key.AltLeft,      2),
+            new(Key.WinLeft,      3),
+            new(Key.ControlRight, 4),
+            new(Key.ShiftRight,   5),
+            new(Key.AltRight,     6),
+            new(Key.WinRight,     7),
+            new(Key.CapsLock,     8),
+            new(Key.ScrollLock,   9),
+            new(Key.NumLock,      10),
         };
 
         private bool _isValid;
-        private string _id;
 
         private MotionInput _leftMotionInput;
         private MotionInput _rightMotionInput;
@@ -219,14 +214,14 @@ namespace Ryujinx.Input.HLE
         public IGamepadDriver GamepadDriver { get; private set; }
         public GamepadStateSnapshot State { get; private set; }
 
-        public string Id => _id;
+        public string Id { get; private set; }
 
-        private CemuHookClient _cemuHookClient;
+        private readonly CemuHookClient _cemuHookClient;
 
         public NpadController(CemuHookClient cemuHookClient)
         {
             State = default;
-            _id = null;
+            Id = null;
             _isValid = false;
             _cemuHookClient = cemuHookClient;
         }
@@ -237,8 +232,8 @@ namespace Ryujinx.Input.HLE
 
             _gamepad?.Dispose();
 
-            _id = config.Id;
-            _gamepad = GamepadDriver.GetGamepad(_id);
+            Id = config.Id;
+            _gamepad = GamepadDriver.GetGamepad(Id);
             _isValid = _gamepad != null;
 
             UpdateUserConfiguration(config);
@@ -278,7 +273,7 @@ namespace Ryujinx.Input.HLE
             if (motionConfig.MotionBackend != MotionInputBackendType.CemuHook)
             {
                 _leftMotionInput = new MotionInput();
-             }
+            }
             else
             {
                 _leftMotionInput = null;
@@ -347,7 +342,7 @@ namespace Ryujinx.Input.HLE
 
         public GamepadInput GetHLEInputState()
         {
-            GamepadInput state = new GamepadInput();
+            GamepadInput state = new();
 
             // First update all buttons
             foreach (HLEButtonMappingEntry entry in _hleButtonMapping)
@@ -366,13 +361,13 @@ namespace Ryujinx.Input.HLE
                 state.LStick = new JoystickPosition
                 {
                     Dx = ClampAxis(leftAxisX),
-                    Dy = ClampAxis(leftAxisY)
+                    Dy = ClampAxis(leftAxisY),
                 };
 
                 state.RStick = new JoystickPosition
                 {
                     Dx = ClampAxis(rightAxisX),
-                    Dy = ClampAxis(rightAxisY)
+                    Dy = ClampAxis(rightAxisY),
                 };
             }
             else if (_config is StandardControllerInputConfig controllerConfig)
@@ -391,16 +386,16 @@ namespace Ryujinx.Input.HLE
         private static JoystickPosition ApplyDeadzone(float x, float y, float deadzone)
         {
             float magnitudeClamped = Math.Min(MathF.Sqrt(x * x + y * y), 1f);
-            
+
             if (magnitudeClamped <= deadzone)
             {
-                return new JoystickPosition() {Dx = 0, Dy = 0};
+                return new JoystickPosition { Dx = 0, Dy = 0 };
             }
-            
-            return new JoystickPosition()
+
+            return new JoystickPosition
             {
                 Dx = ClampAxis((x / magnitudeClamped) * ((magnitudeClamped - deadzone) / (1 - deadzone))),
-                Dy = ClampAxis((y / magnitudeClamped) * ((magnitudeClamped - deadzone) / (1 - deadzone)))
+                Dy = ClampAxis((y / magnitudeClamped) * ((magnitudeClamped - deadzone) / (1 - deadzone))),
             };
         }
 
@@ -428,7 +423,7 @@ namespace Ryujinx.Input.HLE
             return new JoystickPosition
             {
                 Dx = (int)point.X,
-                Dy = (int)point.Y
+                Dy = (int)point.Y,
             };
         }
 
@@ -476,12 +471,12 @@ namespace Ryujinx.Input.HLE
                 rotation = new Vector3();
             }
 
-            return new SixAxisInput()
+            return new SixAxisInput
             {
                 Accelerometer = accelerometer,
-                Gyroscope     = gyroscope,
-                Rotation      = rotation,
-                Orientation   = orientationForHLE
+                Gyroscope = gyroscope,
+                Rotation = rotation,
+                Orientation = orientationForHLE,
             };
         }
 
@@ -502,20 +497,20 @@ namespace Ryujinx.Input.HLE
             {
                 KeyboardStateSnapshot keyboardState = keyboard.GetKeyboardStateSnapshot();
 
-                KeyboardInput hidKeyboard = new KeyboardInput
+                KeyboardInput hidKeyboard = new()
                 {
                     Modifier = 0,
-                    Keys = new ulong[0x4]
+                    Keys = new ulong[0x4],
                 };
 
-                foreach (HLEKeyboardMappingEntry entry in KeyMapping)
+                foreach (HLEKeyboardMappingEntry entry in _keyMapping)
                 {
                     ulong value = keyboardState.IsPressed(entry.TargetKey) ? 1UL : 0UL;
 
                     hidKeyboard.Keys[entry.Target / 0x40] |= (value << (entry.Target % 0x40));
                 }
 
-                foreach (HLEKeyboardMappingEntry entry in KeyModifierMapping)
+                foreach (HLEKeyboardMappingEntry entry in _keyModifierMapping)
                 {
                     int value = keyboardState.IsPressed(entry.TargetKey) ? 1 : 0;
 
@@ -539,6 +534,7 @@ namespace Ryujinx.Input.HLE
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
 
diff --git a/src/Ryujinx.Input/HLE/NpadManager.cs b/src/Ryujinx.Input/HLE/NpadManager.cs
index 89a2f585b..25887748f 100644
--- a/src/Ryujinx.Input/HLE/NpadManager.cs
+++ b/src/Ryujinx.Input/HLE/NpadManager.cs
@@ -7,13 +7,15 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.Runtime.CompilerServices;
 using CemuHookClient = Ryujinx.Input.Motion.CemuHook.Client;
+using ControllerType = Ryujinx.Common.Configuration.Hid.ControllerType;
+using PlayerIndex = Ryujinx.HLE.HOS.Services.Hid.PlayerIndex;
 using Switch = Ryujinx.HLE.Switch;
 
 namespace Ryujinx.Input.HLE
 {
     public class NpadManager : IDisposable
     {
-        private CemuHookClient _cemuHookClient;
+        private readonly CemuHookClient _cemuHookClient;
 
         private readonly object _lock = new();
 
@@ -21,7 +23,7 @@ namespace Ryujinx.Input.HLE
 
         private const int MaxControllers = 9;
 
-        private NpadController[] _controllers;
+        private readonly NpadController[] _controllers;
 
         private readonly IGamepadDriver _keyboardDriver;
         private readonly IGamepadDriver _gamepadDriver;
@@ -51,7 +53,7 @@ namespace Ryujinx.Input.HLE
         {
             lock (_lock)
             {
-                List<InputConfig> validInputs = new List<InputConfig>();
+                List<InputConfig> validInputs = new();
                 foreach (var inputConfigEntry in _inputConfig)
                 {
                     if (_controllers[(int)inputConfigEntry.PlayerIndex] != null)
@@ -96,10 +98,8 @@ namespace Ryujinx.Input.HLE
             {
                 return controller.UpdateDriverConfiguration(targetDriver, config);
             }
-            else
-            {
-                return controller.GamepadDriver != null;
-            }
+
+            return controller.GamepadDriver != null;
         }
 
         public void ReloadConfiguration(List<InputConfig> inputConfig, bool enableKeyboard, bool enableMouse)
@@ -112,11 +112,11 @@ namespace Ryujinx.Input.HLE
                     _controllers[i] = null;
                 }
 
-                List<InputConfig> validInputs = new List<InputConfig>();
+                List<InputConfig> validInputs = new();
 
                 foreach (InputConfig inputConfigEntry in inputConfig)
                 {
-                    NpadController controller = new NpadController(_cemuHookClient);
+                    NpadController controller = new(_cemuHookClient);
 
                     bool isValid = DriverConfigurationUpdate(ref controller, inputConfigEntry);
 
@@ -131,9 +131,9 @@ namespace Ryujinx.Input.HLE
                     }
                 }
 
-                _inputConfig    = inputConfig;
+                _inputConfig = inputConfig;
                 _enableKeyboard = enableKeyboard;
-                _enableMouse    = enableMouse;
+                _enableMouse = enableMouse;
 
                 _device.Hid.RefreshInputConfig(validInputs);
             }
@@ -167,8 +167,8 @@ namespace Ryujinx.Input.HLE
         {
             lock (_lock)
             {
-                List<GamepadInput> hleInputStates = new List<GamepadInput>();
-                List<SixAxisInput> hleMotionStates = new List<SixAxisInput>(NpadDevices.MaxControllers);
+                List<GamepadInput> hleInputStates = new();
+                List<SixAxisInput> hleMotionStates = new(NpadDevices.MaxControllers);
 
                 KeyboardInput? hleKeyboardInput = null;
 
@@ -178,7 +178,7 @@ namespace Ryujinx.Input.HLE
                     (SixAxisInput, SixAxisInput) motionState = default;
 
                     NpadController controller = _controllers[(int)inputConfig.PlayerIndex];
-                    Ryujinx.HLE.HOS.Services.Hid.PlayerIndex playerIndex = (Ryujinx.HLE.HOS.Services.Hid.PlayerIndex)inputConfig.PlayerIndex;
+                    PlayerIndex playerIndex = (PlayerIndex)inputConfig.PlayerIndex;
 
                     bool isJoyconPair = false;
 
@@ -195,7 +195,7 @@ namespace Ryujinx.Input.HLE
 
                         inputState.Buttons |= _device.Hid.UpdateStickButtons(inputState.LStick, inputState.RStick);
 
-                        isJoyconPair = inputConfig.ControllerType == Common.Configuration.Hid.ControllerType.JoyconPair;
+                        isJoyconPair = inputConfig.ControllerType == ControllerType.JoyconPair;
 
                         var altMotionState = isJoyconPair ? controller.GetHLEMotionState(true) : default;
 
@@ -284,7 +284,7 @@ namespace Ryujinx.Input.HLE
         {
             lock (_lock)
             {
-                return _inputConfig.Find(x => x.PlayerIndex == (Ryujinx.Common.Configuration.Hid.PlayerIndex)index);
+                return _inputConfig.Find(x => x.PlayerIndex == (Common.Configuration.Hid.PlayerIndex)index);
             }
         }
 
@@ -314,6 +314,7 @@ namespace Ryujinx.Input.HLE
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             Dispose(true);
         }
     }
diff --git a/src/Ryujinx.Input/HLE/TouchScreenManager.cs b/src/Ryujinx.Input/HLE/TouchScreenManager.cs
index e4b0f8fc7..c613f9281 100644
--- a/src/Ryujinx.Input/HLE/TouchScreenManager.cs
+++ b/src/Ryujinx.Input/HLE/TouchScreenManager.cs
@@ -31,7 +31,7 @@ namespace Ryujinx.Input.HLE
                     MouseStateSnapshot snapshot = IMouse.GetMouseStateSnapshot(_mouse);
                     var touchPosition = IMouse.GetScreenPosition(snapshot.Position, _mouse.ClientSize, aspectRatio);
 
-                    TouchPoint currentPoint = new TouchPoint
+                    TouchPoint currentPoint = new()
                     {
                         Attribute = TouchAttribute.End,
 
@@ -41,7 +41,7 @@ namespace Ryujinx.Input.HLE
                         // Placeholder values till more data is acquired
                         DiameterX = 10,
                         DiameterY = 10,
-                        Angle = 90
+                        Angle = 90,
                     };
 
                     _device.Hid.Touchscreen.Update(currentPoint);
@@ -71,7 +71,7 @@ namespace Ryujinx.Input.HLE
                     attribute = TouchAttribute.End;
                 }
 
-                TouchPoint currentPoint = new TouchPoint
+                TouchPoint currentPoint = new()
                 {
                     Attribute = attribute,
 
@@ -81,7 +81,7 @@ namespace Ryujinx.Input.HLE
                     // Placeholder values till more data is acquired
                     DiameterX = 10,
                     DiameterY = 10,
-                    Angle = 90
+                    Angle = 90,
                 };
 
                 _device.Hid.Touchscreen.Update(currentPoint);
@@ -94,6 +94,9 @@ namespace Ryujinx.Input.HLE
             return false;
         }
 
-        public void Dispose() { }
+        public void Dispose()
+        {
+            GC.SuppressFinalize(this);
+        }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/IMouse.cs b/src/Ryujinx.Input/IMouse.cs
index fde150fc2..e20e7798d 100644
--- a/src/Ryujinx.Input/IMouse.cs
+++ b/src/Ryujinx.Input/IMouse.cs
@@ -8,7 +8,9 @@ namespace Ryujinx.Input
     /// </summary>
     public interface IMouse : IGamepad
     {
+#pragma warning disable IDE0051 // Remove unused private member
         private const int SwitchPanelWidth = 1280;
+#pragma warning restore IDE0051
         private const int SwitchPanelHeight = 720;
 
         /// <summary>
@@ -101,4 +103,4 @@ namespace Ryujinx.Input
             return new Vector2();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Key.cs b/src/Ryujinx.Input/Key.cs
index 5fa044847..b4229e059 100644
--- a/src/Ryujinx.Input/Key.cs
+++ b/src/Ryujinx.Input/Key.cs
@@ -137,6 +137,6 @@
         BackSlash,
         Unbound,
 
-        Count
+        Count,
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/KeyboardStateSnapshot.cs b/src/Ryujinx.Input/KeyboardStateSnapshot.cs
index da77a461f..abf85666b 100644
--- a/src/Ryujinx.Input/KeyboardStateSnapshot.cs
+++ b/src/Ryujinx.Input/KeyboardStateSnapshot.cs
@@ -7,7 +7,7 @@ namespace Ryujinx.Input
     /// </summary>
     public class KeyboardStateSnapshot
     {
-        private bool[] _keysState;
+        private readonly bool[] _keysState;
 
         /// <summary>
         /// Create a new <see cref="KeyboardStateSnapshot"/>.
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Client.cs b/src/Ryujinx.Input/Motion/CemuHook/Client.cs
index a79412a17..b8b936c1e 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Client.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Client.cs
@@ -19,7 +19,7 @@ namespace Ryujinx.Input.Motion.CemuHook
 {
     public class Client : IDisposable
     {
-        public const uint   Magic   = 0x43555344; // DSUC
+        public const uint Magic = 0x43555344; // DSUC
         public const ushort Version = 1001;
 
         private bool _active;
@@ -29,15 +29,15 @@ namespace Ryujinx.Input.Motion.CemuHook
         private readonly Dictionary<int, UdpClient> _clients;
 
         private readonly bool[] _clientErrorStatus = new bool[Enum.GetValues<PlayerIndex>().Length];
-        private readonly long[] _clientRetryTimer  = new long[Enum.GetValues<PlayerIndex>().Length];
-        private NpadManager _npadManager;
+        private readonly long[] _clientRetryTimer = new long[Enum.GetValues<PlayerIndex>().Length];
+        private readonly NpadManager _npadManager;
 
         public Client(NpadManager npadManager)
         {
             _npadManager = npadManager;
-            _hosts       = new Dictionary<int, IPEndPoint>();
-            _motionData  = new Dictionary<int, Dictionary<int, MotionInput>>();
-            _clients     = new Dictionary<int, UdpClient>();
+            _hosts = new Dictionary<int, IPEndPoint>();
+            _motionData = new Dictionary<int, Dictionary<int, MotionInput>>();
+            _clients = new Dictionary<int, UdpClient>();
 
             CloseClients();
         }
@@ -84,7 +84,7 @@ namespace Ryujinx.Input.Motion.CemuHook
 
                 try
                 {
-                    IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(host), port);
+                    IPEndPoint endPoint = new(IPAddress.Parse(host), port);
 
                     client = new UdpClient(host, port);
 
@@ -141,9 +141,9 @@ namespace Ryujinx.Input.Motion.CemuHook
         {
             lock (_motionData)
             {
-                if (_motionData.ContainsKey(player))
+                if (_motionData.TryGetValue(player, out Dictionary<int, MotionInput> value))
                 {
-                    if (_motionData[player].TryGetValue(slot, out input))
+                    if (value.TryGetValue(slot, out input))
                     {
                         return true;
                     }
@@ -164,26 +164,26 @@ namespace Ryujinx.Input.Motion.CemuHook
 
         private void Send(byte[] data, int clientId)
         {
-            if (_clients.TryGetValue(clientId, out UdpClient _client))
+            if (_clients.TryGetValue(clientId, out UdpClient client))
             {
-                if (_client != null && _client.Client != null && _client.Client.Connected)
+                if (client != null && client.Client != null && client.Client.Connected)
                 {
                     try
                     {
-                        _client?.Send(data, data.Length);
+                        client?.Send(data, data.Length);
                     }
                     catch (SocketException socketException)
                     {
                         if (!_clientErrorStatus[clientId])
                         {
-                            Logger.Warning?.PrintMsg(LogClass.Hid, $"Unable to send data request to motion source at {_client.Client.RemoteEndPoint}. Error: {socketException.ErrorCode}");
+                            Logger.Warning?.PrintMsg(LogClass.Hid, $"Unable to send data request to motion source at {client.Client.RemoteEndPoint}. Error: {socketException.ErrorCode}");
                         }
 
                         _clientErrorStatus[clientId] = true;
 
                         RemoveClient(clientId);
 
-                        _client?.Dispose();
+                        client?.Dispose();
 
                         SetRetryTimer(clientId);
                     }
@@ -193,7 +193,7 @@ namespace Ryujinx.Input.Motion.CemuHook
 
                         RemoveClient(clientId);
 
-                        _client?.Dispose();
+                        client?.Dispose();
 
                         SetRetryTimer(clientId);
                     }
@@ -203,13 +203,13 @@ namespace Ryujinx.Input.Motion.CemuHook
 
         private byte[] Receive(int clientId, int timeout = 0)
         {
-            if (_hosts.TryGetValue(clientId, out IPEndPoint endPoint) && _clients.TryGetValue(clientId, out UdpClient _client))
+            if (_hosts.TryGetValue(clientId, out IPEndPoint endPoint) && _clients.TryGetValue(clientId, out UdpClient client))
             {
-                if (_client != null && _client.Client != null && _client.Client.Connected)
+                if (client != null && client.Client != null && client.Client.Connected)
                 {
-                    _client.Client.ReceiveTimeout = timeout;
+                    client.Client.ReceiveTimeout = timeout;
 
-                    var result = _client?.Receive(ref endPoint);
+                    var result = client?.Receive(ref endPoint);
 
                     if (result.Length > 0)
                     {
@@ -242,9 +242,9 @@ namespace Ryujinx.Input.Motion.CemuHook
 
         public void ReceiveLoop(int clientId)
         {
-            if (_hosts.TryGetValue(clientId, out IPEndPoint endPoint) && _clients.TryGetValue(clientId, out UdpClient _client))
+            if (_hosts.TryGetValue(clientId, out IPEndPoint endPoint) && _clients.TryGetValue(clientId, out UdpClient client))
             {
-                if (_client != null && _client.Client != null && _client.Client.Connected)
+                if (client != null && client.Client != null && client.Client.Connected)
                 {
                     try
                     {
@@ -271,7 +271,7 @@ namespace Ryujinx.Input.Motion.CemuHook
 
                         RemoveClient(clientId);
 
-                        _client?.Dispose();
+                        client?.Dispose();
 
                         SetRetryTimer(clientId);
                     }
@@ -281,7 +281,7 @@ namespace Ryujinx.Input.Motion.CemuHook
 
                         RemoveClient(clientId);
 
-                        _client?.Dispose();
+                        client?.Dispose();
 
                         SetRetryTimer(clientId);
                     }
@@ -297,8 +297,8 @@ namespace Ryujinx.Input.Motion.CemuHook
 
             data = data.AsSpan()[16..].ToArray();
 
-            using MemoryStream stream = new MemoryStream(data);
-            using BinaryReader reader = new BinaryReader(stream);
+            using MemoryStream stream = new(data);
+            using BinaryReader reader = new(stream);
 
             switch (type)
             {
@@ -310,18 +310,18 @@ namespace Ryujinx.Input.Motion.CemuHook
                 case MessageType.Data:
                     ControllerDataResponse inputData = reader.ReadStruct<ControllerDataResponse>();
 
-                    Vector3 accelerometer = new Vector3()
+                    Vector3 accelerometer = new()
                     {
                         X = -inputData.AccelerometerX,
                         Y = inputData.AccelerometerZ,
-                        Z = -inputData.AccelerometerY
+                        Z = -inputData.AccelerometerY,
                     };
 
-                    Vector3 gyroscrope = new Vector3()
+                    Vector3 gyroscrope = new()
                     {
                         X = inputData.GyroscopePitch,
                         Y = inputData.GyroscopeRoll,
-                        Z = -inputData.GyroscopeYaw
+                        Z = -inputData.GyroscopeYaw,
                     };
 
                     ulong timestamp = inputData.MotionTimestamp;
@@ -346,7 +346,7 @@ namespace Ryujinx.Input.Motion.CemuHook
                                 }
                                 else
                                 {
-                                    MotionInput input = new MotionInput();
+                                    MotionInput input = new();
 
                                     input.Update(accelerometer, gyroscrope, timestamp, cemuHookConfig.Sensitivity, (float)cemuHookConfig.GyroDeadzone);
 
@@ -355,11 +355,11 @@ namespace Ryujinx.Input.Motion.CemuHook
                             }
                             else
                             {
-                                MotionInput input = new MotionInput();
+                                MotionInput input = new();
 
                                 input.Update(accelerometer, gyroscrope, timestamp, cemuHookConfig.Sensitivity, (float)cemuHookConfig.GyroDeadzone);
 
-                                _motionData.Add(clientId, new Dictionary<int, MotionInput>() { { slot, input } });
+                                _motionData.Add(clientId, new Dictionary<int, MotionInput> { { slot, input } });
                             }
                         }
                         else
@@ -380,38 +380,37 @@ namespace Ryujinx.Input.Motion.CemuHook
 
             Header header = GenerateHeader(clientId);
 
-            using (MemoryStream stream = MemoryStreamManager.Shared.GetStream())
-            using (BinaryWriter writer = new BinaryWriter(stream))
+            using MemoryStream stream = MemoryStreamManager.Shared.GetStream();
+            using BinaryWriter writer = new(stream);
+
+            writer.WriteStruct(header);
+
+            ControllerInfoRequest request = new()
             {
-                writer.WriteStruct(header);
+                Type = MessageType.Info,
+                PortsCount = 4,
+            };
 
-                ControllerInfoRequest request = new ControllerInfoRequest()
-                {
-                    Type       = MessageType.Info,
-                    PortsCount = 4
-                };
+            request.PortIndices[0] = (byte)slot;
 
-                request.PortIndices[0] = (byte)slot;
+            writer.WriteStruct(request);
 
-                writer.WriteStruct(request);
+            header.Length = (ushort)(stream.Length - 16);
 
-                header.Length = (ushort)(stream.Length - 16);
+            writer.Seek(6, SeekOrigin.Begin);
+            writer.Write(header.Length);
 
-                writer.Seek(6, SeekOrigin.Begin);
-                writer.Write(header.Length);
+            Crc32.Hash(stream.ToArray(), header.Crc32.AsSpan());
 
-                Crc32.Hash(stream.ToArray(), header.Crc32.AsSpan());
+            writer.Seek(8, SeekOrigin.Begin);
+            writer.Write(header.Crc32.AsSpan());
 
-                writer.Seek(8, SeekOrigin.Begin);
-                writer.Write(header.Crc32.AsSpan());
+            byte[] data = stream.ToArray();
 
-                byte[] data = stream.ToArray();
-
-                Send(data, clientId);
-            }
+            Send(data, clientId);
         }
 
-        public unsafe void RequestData(int clientId, int slot)
+        public void RequestData(int clientId, int slot)
         {
             if (!_active)
             {
@@ -420,44 +419,43 @@ namespace Ryujinx.Input.Motion.CemuHook
 
             Header header = GenerateHeader(clientId);
 
-            using (MemoryStream stream = MemoryStreamManager.Shared.GetStream())
-            using (BinaryWriter writer = new BinaryWriter(stream))
+            using MemoryStream stream = MemoryStreamManager.Shared.GetStream();
+            using BinaryWriter writer = new(stream);
+
+            writer.WriteStruct(header);
+
+            ControllerDataRequest request = new()
             {
-                writer.WriteStruct(header);
+                Type = MessageType.Data,
+                Slot = (byte)slot,
+                SubscriberType = SubscriberType.Slot,
+            };
 
-                ControllerDataRequest request = new ControllerDataRequest()
-                {
-                    Type           = MessageType.Data,
-                    Slot           = (byte)slot,
-                    SubscriberType = SubscriberType.Slot
-                };
+            writer.WriteStruct(request);
 
-                writer.WriteStruct(request);
+            header.Length = (ushort)(stream.Length - 16);
 
-                header.Length = (ushort)(stream.Length - 16);
+            writer.Seek(6, SeekOrigin.Begin);
+            writer.Write(header.Length);
 
-                writer.Seek(6, SeekOrigin.Begin);
-                writer.Write(header.Length);
+            Crc32.Hash(stream.ToArray(), header.Crc32.AsSpan());
 
-                Crc32.Hash(stream.ToArray(), header.Crc32.AsSpan());
+            writer.Seek(8, SeekOrigin.Begin);
+            writer.Write(header.Crc32.AsSpan());
 
-                writer.Seek(8, SeekOrigin.Begin);
-                writer.Write(header.Crc32.AsSpan());
+            byte[] data = stream.ToArray();
 
-                byte[] data = stream.ToArray();
-
-                Send(data, clientId);
-            }
+            Send(data, clientId);
         }
 
-        private Header GenerateHeader(int clientId)
+        private static Header GenerateHeader(int clientId)
         {
-            Header header = new Header()
+            Header header = new()
             {
-                Id          = (uint)clientId,
+                Id = (uint)clientId,
                 MagicString = Magic,
-                Version     = Version,
-                Length      = 0
+                Version = Version,
+                Length = 0,
             };
 
             return header;
@@ -465,9 +463,10 @@ namespace Ryujinx.Input.Motion.CemuHook
 
         public void Dispose()
         {
+            GC.SuppressFinalize(this);
             _active = false;
 
             CloseClients();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs
index 7fb72344c..4eee2e8e0 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerData.cs
@@ -16,15 +16,15 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
     public struct ControllerDataResponse
     {
         public SharedResponse Shared;
-        public byte           Connected;
-        public uint           PacketId;
-        public byte           ExtraButtons;
-        public byte           MainButtons;
-        public ushort         PSExtraInput;
-        public ushort         LeftStickXY;
-        public ushort         RightStickXY;
-        public uint           DPadAnalog;
-        public ulong          MainButtonsAnalog;
+        public byte Connected;
+        public uint PacketId;
+        public byte ExtraButtons;
+        public byte MainButtons;
+        public ushort PSExtraInput;
+        public ushort LeftStickXY;
+        public ushort RightStickXY;
+        public uint DPadAnalog;
+        public ulong MainButtonsAnalog;
 
         public Array6<byte> Touch1;
         public Array6<byte> Touch2;
@@ -42,6 +42,6 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
     {
         All,
         Slot,
-        Mac
+        Mac,
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs
index 63d4524a8..3e51c2915 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/ControllerInfo.cs
@@ -7,7 +7,7 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
     public struct ControllerInfoResponse
     {
         public SharedResponse Shared;
-        private byte _zero;
+        private readonly byte _zero;
     }
 
     [StructLayout(LayoutKind.Sequential, Pack = 1)]
@@ -17,4 +17,4 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
         public int PortsCount;
         public Array4<byte> PortIndices;
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs
index 57f58ff03..142006d17 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/Header.cs
@@ -12,4 +12,4 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
         public Array4<byte> Crc32;
         public uint Id;
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs
index de1e5e90d..5ef15a7a3 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/MessageType.cs
@@ -4,6 +4,6 @@
     {
         Protocol = 0x100000,
         Info,
-        Data
+        Data,
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs b/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs
index e2e1ee9b4..be37f53b6 100644
--- a/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs
+++ b/src/Ryujinx.Input/Motion/CemuHook/Protocol/SharedResponse.cs
@@ -6,11 +6,11 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
     [StructLayout(LayoutKind.Sequential, Pack = 1)]
     public struct SharedResponse
     {
-        public MessageType     Type;
-        public byte            Slot;
-        public SlotState       State;
+        public MessageType Type;
+        public byte Slot;
+        public SlotState State;
         public DeviceModelType ModelType;
-        public ConnectionType  ConnectionType;
+        public ConnectionType ConnectionType;
 
         public Array6<byte> MacAddress;
         public BatteryStatus BatteryStatus;
@@ -20,21 +20,21 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
     {
         Disconnected,
         Reserved,
-        Connected
+        Connected,
     }
 
     public enum DeviceModelType : byte
     {
         None,
         PartialGyro,
-        FullGyro
+        FullGyro,
     }
 
     public enum ConnectionType : byte
     {
         None,
         USB,
-        Bluetooth
+        Bluetooth,
     }
 
     public enum BatteryStatus : byte
@@ -46,6 +46,6 @@ namespace Ryujinx.Input.Motion.CemuHook.Protocol
         High,
         Full,
         Charging,
-        Charged
+        Charged,
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/MotionInput.cs b/src/Ryujinx.Input/Motion/MotionInput.cs
index 1923d9cbe..2c7af58f6 100644
--- a/src/Ryujinx.Input/Motion/MotionInput.cs
+++ b/src/Ryujinx.Input/Motion/MotionInput.cs
@@ -6,19 +6,19 @@ namespace Ryujinx.Input
 {
     public class MotionInput
     {
-        public ulong   TimeStamp     { get; set; }
+        public ulong TimeStamp { get; set; }
         public Vector3 Accelerometer { get; set; }
-        public Vector3 Gyroscrope    { get; set; }
-        public Vector3 Rotation      { get; set; }
+        public Vector3 Gyroscrope { get; set; }
+        public Vector3 Rotation { get; set; }
 
         private readonly MotionSensorFilter _filter;
 
         public MotionInput()
         {
-            TimeStamp     = 0;
+            TimeStamp = 0;
             Accelerometer = new Vector3();
-            Gyroscrope    = new Vector3();
-            Rotation      = new Vector3();
+            Gyroscrope = new Vector3();
+            Rotation = new Vector3();
 
             // TODO: RE the correct filter.
             _filter = new MotionSensorFilter(0f);
@@ -62,4 +62,4 @@ namespace Ryujinx.Input
             return degree * (MathF.PI / 180);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/Motion/MotionSensorFilter.cs b/src/Ryujinx.Input/Motion/MotionSensorFilter.cs
index 440fa7ac5..1a9749682 100644
--- a/src/Ryujinx.Input/Motion/MotionSensorFilter.cs
+++ b/src/Ryujinx.Input/Motion/MotionSensorFilter.cs
@@ -106,19 +106,19 @@ namespace Ryujinx.Input.Motion
             float q1 = Quaternion.W;
 
             // Estimated direction of gravity.
-            Vector3 gravity = new Vector3()
+            Vector3 gravity = new()
             {
                 X = 2f * (q2 * q4 - q1 * q3),
                 Y = 2f * (q1 * q2 + q3 * q4),
-                Z = q1 * q1 - q2 * q2 - q3 * q3 + q4 * q4
+                Z = q1 * q1 - q2 * q2 - q3 * q3 + q4 * q4,
             };
 
             // Error is cross product between estimated direction and measured direction of gravity.
-            Vector3 error = new Vector3()
+            Vector3 error = new()
             {
                 X = accel.Y * gravity.Z - accel.Z * gravity.Y,
                 Y = accel.Z * gravity.X - accel.X * gravity.Z,
-                Z = accel.X * gravity.Y - accel.Y * gravity.X
+                Z = accel.X * gravity.Y - accel.Y * gravity.X,
             };
 
             if (Ki > 0f)
@@ -134,7 +134,7 @@ namespace Ryujinx.Input.Motion
             gyro += (Kp * error) + (Ki * _intergralError);
 
             // Integrate rate of change of quaternion.
-            Vector3 delta = new Vector3(q2, q3, q4);
+            Vector3 delta = new(q2, q3, q4);
 
             q1 += (-q2 * gyro.X - q3 * gyro.Y - q4 * gyro.Z) * (SampleRateCoefficient * SamplePeriod);
             q2 += (q1 * gyro.X + delta.Y * gyro.Z - delta.Z * gyro.Y) * (SampleRateCoefficient * SamplePeriod);
@@ -142,7 +142,7 @@ namespace Ryujinx.Input.Motion
             q4 += (q1 * gyro.Z + delta.X * gyro.Y - delta.Y * gyro.X) * (SampleRateCoefficient * SamplePeriod);
 
             // Normalise quaternion.
-            Quaternion quaternion = new Quaternion(q2, q3, q4, q1);
+            Quaternion quaternion = new(q2, q3, q4, q1);
 
             norm = 1f / quaternion.Length();
 
@@ -159,4 +159,4 @@ namespace Ryujinx.Input.Motion
             Quaternion = Quaternion.Identity;
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/MotionInputId.cs b/src/Ryujinx.Input/MotionInputId.cs
index 3176a987a..61c7d305c 100644
--- a/src/Ryujinx.Input/MotionInputId.cs
+++ b/src/Ryujinx.Input/MotionInputId.cs
@@ -20,6 +20,6 @@
         /// Gyroscope.
         /// </summary>
         /// <remarks>Values are in degrees</remarks>
-        Gyroscope
+        Gyroscope,
     }
 }
diff --git a/src/Ryujinx.Input/MouseButton.cs b/src/Ryujinx.Input/MouseButton.cs
index ab7642167..a29910027 100644
--- a/src/Ryujinx.Input/MouseButton.cs
+++ b/src/Ryujinx.Input/MouseButton.cs
@@ -11,6 +11,6 @@ namespace Ryujinx.Input
         Button7,
         Button8,
         Button9,
-        Count
+        Count,
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/MouseStateSnapshot.cs b/src/Ryujinx.Input/MouseStateSnapshot.cs
index ddfdebc6f..9efc9f9c7 100644
--- a/src/Ryujinx.Input/MouseStateSnapshot.cs
+++ b/src/Ryujinx.Input/MouseStateSnapshot.cs
@@ -8,7 +8,7 @@ namespace Ryujinx.Input
     /// </summary>
     public class MouseStateSnapshot
     {
-        private bool[] _buttonState;
+        private readonly bool[] _buttonState;
 
         /// <summary>
         /// The position of the mouse cursor
@@ -31,7 +31,7 @@ namespace Ryujinx.Input
             _buttonState = buttonState;
 
             Position = position;
-            Scroll   = scroll;
+            Scroll = scroll;
         }
 
         /// <summary>
@@ -42,4 +42,4 @@ namespace Ryujinx.Input
         [MethodImpl(MethodImplOptions.AggressiveInlining)]
         public bool IsPressed(MouseButton button) => _buttonState[(int)button];
     }
-}
\ No newline at end of file
+}
diff --git a/src/Ryujinx.Input/StickInputId.cs b/src/Ryujinx.Input/StickInputId.cs
index fc9d80434..94c0f25e8 100644
--- a/src/Ryujinx.Input/StickInputId.cs
+++ b/src/Ryujinx.Input/StickInputId.cs
@@ -9,6 +9,6 @@
         Left,
         Right,
 
-        Count
+        Count,
     }
 }