<spanclass="line"><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iota_gfx_init</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">has_usb</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // turns on the display </span></span>
<spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">#endif</span></span></code></pre></div><ul><li>Within the block bounded by <code>#ifdef OLED_DRIVER_ENABLE</code> and <code>#endif // OLED_DRIVER_ENABLE</code>, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:</li></ul><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">oled_rotation_t</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> oled_init_user</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">oled_rotation_t</span><spanstyle="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> rotation</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>Remove the functions <code>matrix_scan_user</code>, <code>matrix_update</code> and <code>iota_gfx_task_user</code></li><li>Find/Replace <code>matrix_render_user(struct CharacterMatrix *matrix)</code> with <code>iota_gfx_task_user(void)</code></li><li>Find/Replace <code>is_master</code> with <code>is_keyboard_master()</code></li><li>For each instance of <code>matrix_write_ln(matrix, display_fn())</code>, rewrite it as <code>oled_write_ln(read_layer_state(), false);</code></li><li>For each instance of <code>matrix_write(matrix, read_logo());</code>, replace with <code>oled_write(read_logo(), false);</code></li></ul><h3id="refactor-zinc-to-use-split-common"tabindex="-1">Refactor zinc to use split_common <aclass="header-anchor"href="#refactor-zinc-to-use-split-common"aria-label="Permalink to "Refactor zinc to use split_common""></a></h3><p><ahref="https://github.com/qmk/qmk_firmware/pull/7114"target="_blank"rel="noreferrer">#7114</a> and <ahref="https://github.com/qmk/qmk_firmware/pull/9171"target="_blank"rel="noreferrer">#9171</a></p><ul><li>Refactor to use split_common and remove split codes under the zinc/revx/</li><li>Add - backlight RGB LED and/or underglow RGB LED option</li><li>Add - continuous RGB animations feature (between L and R halves)</li><li>Fix - keymap files to adapt to changes <ul><li>all authors of keymaps confirmed this PR</li></ul></li><li>Update - documents and rules.mk</li></ul><h3id="refactor-of-tkc1800-to-use-common-oled-code"tabindex="-1">Refactor of TKC1800 to use common OLED code <aclass="header-anchor"href="#refactor-of-tkc1800-to-use-common-oled-code"aria-label="Permalink to "Refactor of TKC1800 to use common OLED code""></a></h3><p><ahref="https://github.com/qmk/qmk_firmware/pull/8472"target="_blank"rel="noreferrer">#8472</a></p><p>Modifies the default firmware for TKC1800 to use the in-built I2C and OLED drivers, instead of including and depending on its own set of libraries for the following functionality:</p><ul><li>SSD1306 display</li><li>i2c for OLED</li></ul><p>This allows current TKC1800 firmware to advance with updates to those drivers, which are shared with other keyboards.</p><h4id="to-migrate-existing-tkc1800-firmware"tabindex="-1">To migrate existing TKC1800 firmware: <aclass="header-anchor"href="#to-migrate-existing-tkc1800-firmware"aria-label="Permalink to "To migrate existing TKC1800 firmware:""></a></h4><p><ahref="https://github.com/qmk/qmk_firmware/pull/8472/files#diff-d10b26e676b4a55cbb00d71955116526"target="_blank"rel="noreferrer">Changes to <code>config.h</code></a>:</p><ul><li>Remove <code>#define SSD1306OLED</code> from config.h</li></ul><p><ahref="https://github.com/qmk/qmk_firmware/pull/8472/files#diff-3b35bd30abe89c8110717c6972cd2cc5"target="_blank"rel="noreferrer">Changes to <code>tkc1800.c</code></a>:</p><ul><li>Add the following to avoid debug errors on HID_listen if the screen is not present</li></ul><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> keyboard_pre_init_kb</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">void</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><p><ahref="https://github.com/qmk/qmk_firmware/pull/8472/files#diff-05a2a344ce27e4d045fe68520ccd4771"target="_blank"rel="noreferrer">Changes to <code>keymap.c</code></a>:</p><ul><li>Find/Replace each instance of <code>#ifdef SSD1306OLED</code> with <code>#ifdef OLED_DRIVER_ENABLE</code></li><li>The following changes are for compatibility with the OLED driver. If you don't use the OLED driver you may safely delete <ahref="https://github.com/qmk/qmk_firmware/blob/e6b9980bd45c186f7360df68c24b6e05a80c10dc/keyboards/lily58/keymaps/default/keymap.c#L144-L190"target="_blank"rel="noreferrer">this section</a></li><li><ahref="https://github.com/qmk/qmk_firmware/pull/6260/files#diff-20943ea59856e9bdf3d99ecb2eee40b7L91-L158"target="_blank"rel="noreferrer">Remove</a> the block</li></ul><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">#ifdef</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> SSD1306OLED</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;"></span></span>
<spanclass="line"><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> iota_gfx_init</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">!</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">has_usb</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">());</span><spanstyle="--shiki-light:#6A737D;--shiki-dark:#6A737D;"> // turns on the display </span></span>
<spanclass="line"><spanstyle="--shiki-light:#D73A49;--shiki-dark:#F97583;">#endif</span></span></code></pre></div><ul><li>Within the block bounded by <code>#ifdef OLED_DRIVER_ENABLE</code> and <code>#endif // OLED_DRIVER_ENABLE</code>, add the following block to ensure that your two OLEDs are rotated correctly across the left and right sides:</li></ul><divclass="language-c vp-adaptive-theme"><buttontitle="Copy Code"class="copy"></button><spanclass="lang">c</span><preclass="shiki shiki-themes github-light github-dark vp-code"><code><spanclass="line"><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">oled_rotation_t</span><spanstyle="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> oled_init_user</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">(</span><spanstyle="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">oled_rotation_t</span><spanstyle="--shiki-light:#E36209;--shiki-dark:#FFAB70;"> rotation</span><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">) {</span></span>
<spanclass="line"><spanstyle="--shiki-light:#24292E;--shiki-dark:#E1E4E8;">}</span></span></code></pre></div><ul><li>Remove the function <code>iota_gfx_task_user</code></li></ul><h3id="split-hhkb-to-ansi-and-jp-layouts-and-add-via-support-for-each"tabindex="-1">Split HHKB to ANSI and JP layouts and Add VIA support for each <aclass="header-anchor"href="#split-hhkb-to-ansi-and-jp-layouts-and-add-via-support-for-each"aria-label="Permalink to "Split HHKB to ANSI and JP layouts and Add VIA support for each""></a></h3><p><ahref="https://github.com/qmk/qmk_firmware/pull/8582"target="_blank"rel="noreferrer">#8582</a></p><ul><li>Splits the HHKB codebase into two separate folders <code>keyboards/hhkb/ansi</code> and <code>keyboards/hhkb/jp</code>.</li><li>Adds VIA Configurator support for both versions.</li></ul><h4id="migrating-existing-hhkb-keymaps"tabindex="-1">Migrating existing HHKB keymaps <aclass="header-anchor"href="#migrating-existing-hhkb-keymaps"aria-label="Permalink to "Migrating existing HHKB keymaps""></a></h4><ul><li>Remove any checks for the <code>HHKB_JP</code> definition <ul><li>All checks for this definition have been removed, and each version uses the source that is appropriate to that version.</li></ul></li><li>Move the directory for your keymap into the appropriate <code>keymaps</code> directory <ul><li><code>keyboards/hhkb/ansi/keymaps/</code> for ANSI HHKBs</li><li><code>keyboards/hhkb/jp/keymaps/</code> for HHKB JPs</li></ul></li><li>Compile with the new keyboard names <ul><li>This PR changes the compilation instructions for the HHKB Alternate Controller. To compile firmware for this controller moving forward, use: <ul><li><code>make hhkb/ansi</code> for ANSI-layout HHKBs</li><li><code>make hhkb/jp</code> for HHKB JP keyboards</li></ul></li></ul></li></ul><h2id="keyboard-moves"tabindex="-1">Keyboard Moves <aclass="header-anchor"href="#keyboard-moves"aria-label="Permalink to "Keyboard Moves""></a></h2><ul><li><ahref="https://github.com/qmk/qmk_firmware/pull/8412"title="Changing board names to prevent confusion"target="_blank"rel="noreferrer">#8412</a> by blindassassin111</li><li><ahref="https://github.com/qmk/qmk_firmware/pull/8499"title="Move the Keyboardio Model01 to a keyboardio/ subdir"target="_blank"rel="noreferrer">#8499</a> by algernon</li><li><ahref="https://github.com/qmk/qmk_firmware/pull/8830"title="Move spaceman keyboards"target="_blank"rel="noreferrer">#8830</a> by Spaceman (formerly known as Rionlion100)</li><li><ahref="https://github.com/qmk/qmk_firmware/pull/8537"title="Organizing my keyboards (plaid, tartan, ergoinu)"target="_blank"rel="noreferrer">#8537</a> by hsgw</li></ul><p>Keyboards by Keyboardio, Spaceman, and hsgw move to vendor folders, while PCBs designed by blindassassin111 are renamed.</p><table><thead><tr><thstyle="text-align:left;">Old Name</th><thstyle="text-align:left;">New Name</th></tr></thead><tbody><tr><tdstyle="text-align:left;">2_milk</td><tdstyle="text-align:left;">spaceman/2_milk</td></tr><tr><tdstyle="text-align:left;">at101_blackheart</td><tdstyle="text-align:left;">at101_bh</td></tr><tr><tdstyle="text-align:left;">ergoinu</td><tdstyle="text-align:left;">dm9records/ergoinu</td></tr><tr><tdstyle="text-align:left;">model01</td><tdstyle="text-align:left;">keyboardio/model01</td></tr><tr><tdstyle="text-align:left;">omnikey_blackheart</td><tdstyle="text-align:left;">omnikey_bh</td></tr><tr><tdstyle="text-align:left;">pancake</td><tdstyle="text-align:left;">spaceman/pancake</td></tr><tr><tdstyle="text-align:left;">plaid</td><tdstyle="text-align:left;">dm9records/plaid</td></tr><tr><tdstyle="text-align:left;">tartan</td><tdstyle="text-align:left;">dm9records/tartan</td></tr><tr><tdstyle="text-align:left;">z150_blackheart</td><tdstyle="text-align:left;">z150_bh</td></tr></tbody></table><p>If you own one of these PCBs, please use the new names to compile your firmware moving forward.</p><h2id="keycode-migration-prs"tabindex="-1">Keycode Migration PRs <aclass="header-anchor"hre