spi_nor_wri...cr_and_check(9)
π spi_nor_wri...cr_and_check(9) β Kernel API Manual, bestie edition β¨
okay so you opened the kernel API manual, and the vibe is immaculate. welcome to spi_nor_write_sr_cr_and_check, a function that writes the Status Register 1 and then β¨double-checksβ¨ that the byte it wrote actually matches the value it received. no cap, it does the exact same thing for the Control Register too, if there is one. it's giving "trust but verify" and honestly? iconic. π
πΈ SYNOPSIS πΈ
int spi_nor_write_sr_cr_and_check (struct spi_nor *nor , const u8 *regs
);
like literally that's the whole signature. look at her go π
π¦ ARGUMENTS π¦
norβ pointer to astruct spi_nor, i.e. your main character struct. she's the one holding everything together, periodt. πregsβ byte array to be written to the registers. it's the actual payload, the ~moment~, the thing that gets shipped off to the registers. π¦
β RETURN β
0 on success, -errno otherwise. that's it, that's the whole mood. 0 = slay, -errno = not slay (and the errno will tell you why, iykyk). π
π SEE ALSO π
the whole friend group, fr fr. every single one of these linked (9) manpages, in the exact order the kernel gave them to us:
spi_nor_get_cmd_ext(9)spi_nor_spimem_setup_op(9)spi_nor_spimem_bounce(9)spi_nor_spimem_exec_op(9)spi_nor_spimem_read_data(9)spi_nor_read_data(9)spi_nor_spimem_write_data(9)spi_nor_write_data(9)spi_nor_read_any_reg(9)spi_nor_write_any_volatile_reg(9)spi_nor_write_enable(9)spi_nor_write_disable(9)spi_nor_read_id(9)spi_nor_read_sr(9)spi_nor_read_cr(9)spi_nor_set_4byte_addr_mode_en4b_ex4b(9)spi_nor_set_4byte_addr_mode_wren_en4b_ex4b(9)spi_nor_set_4byte_addr_mode_brwr(9)spi_nor_sr_ready(9)spi_nor_use_parallel_locking(9)spi_nor_ready(9)spi_nor_wait_till_ready_with_timeout(9)spi_nor_wait_till_ready(9)spi_nor_global_block_unlock(9)spi_nor_write_sr(9)spi_nor_write_sr1_and_check(9)spi_nor_write_16bit_sr_and_check(9)spi_nor_write_16bit_cr_and_check(9)spi_nor_write_16bit_sr_cr_and_check(9)spi_nor_write_sr_and_check(9)spi_nor_write_sr2(9)spi_nor_read_sr2(9)spi_nor_erase_die(9)spi_nor_div_by_erase_size(9)spi_nor_find_best_erase_type(9)spi_nor_init_erase_cmd(9)spi_nor_destroy_erase_cmd_list(9)spi_nor_init_erase_cmd_list(9)spi_nor_erase_multi_sectors(9)spi_nor_sr1_bit6_quad_enable(9)spi_nor_sr2_bit1_quad_enable(9)spi_nor_sr2_bit7_quad_enable(9)spi_nor_spimem_check_read_pp_op(9)spi_nor_spimem_check_readop(9)spi_nor_spimem_check_pp(9)spi_nor_spimem_adjust_hwcaps(9)spi_nor_set_erase_type(9)spi_nor_mask_erase_type(9)spi_nor_init_uniform_erase_map(9)spi_nor_select_uniform_erase(9)spi_nor_manufacturer_init_params(9)spi_nor_no_sfdp_init_params(9)spi_nor_init_flags(9)spi_nor_init_fixup_flags(9)spi_nor_late_init_params(9)spi_nor_sfdp_init_params_deprecated(9)spi_nor_init_params_deprecated(9)spi_nor_init_default_params(9)spi_nor_init_params(9)spi_nor_quad_enable(9)spi_nor_set_4byte_addr_mode(9)spi_nor_soft_reset(9)
π real talk: there are a LOT of them. that's 62 links, bestie, and not one of them got skipped. go read them all, or at least the ones that vibe with your current bug. π«Ά
also worth knowing: this page lives in the Kernel file ./drivers/mtd/spi-nor/core.c. π
and that's the whole page! mwah π this little beauty is from ./drivers/mtd/spi-nor, dated October 2026, and yes the header still says spi_nor_wri...cr_and_check(9) because the kernel was too real to spell it all out. bye bestie, go write some registers π§π
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms