depends on MTD_NAND_CORE
 
 config MTD_NAND_ECC_SW_HAMMING
-       bool
+       bool "Software Hamming ECC engine"
+       default y if MTD_RAW_NAND
+       select MTD_NAND_ECC
+       help
+         This enables support for software Hamming error
+         correction. This correction can correct up to 1 bit error
+         per chunk and detect up to 2 bit errors. While it used to be
+         widely used with old parts, newer NAND chips usually require
+         more strength correction and in this case BCH or RS will be
+         preferred.
 
 config MTD_NAND_ECC_SW_HAMMING_SMC
        bool "NAND ECC Smart Media byte order"
 
        tristate "Raw/Parallel NAND Device Support"
        select MTD_NAND_CORE
        select MTD_NAND_ECC
-       select MTD_NAND_ECC_SW_HAMMING
        help
          This enables support for accessing all type of raw/parallel
          NAND flash devices. For further information see
 config MTD_NAND_NDFC
        tristate "IBM/MCC 4xx NAND controller"
        depends on 4xx
+       select MTD_NAND_ECC_SW_HAMMING
        select MTD_NAND_ECC_SW_HAMMING_SMC
        help
          NDFC Nand Flash Controllers are integrated in IBM/AMCC's 4xx SoCs
 
        unsigned int sm_order;
 };
 
+#if IS_ENABLED(CONFIG_MTD_NAND_ECC_SW_HAMMING)
+
 int ecc_sw_hamming_calculate(const unsigned char *buf, unsigned int step_size,
                             unsigned char *code, bool sm_order);
 int nand_ecc_sw_hamming_calculate(struct nand_device *nand,
                                unsigned char *read_ecc,
                                unsigned char *calc_ecc);
 
+#else /* !CONFIG_MTD_NAND_ECC_SW_HAMMING */
+
+static inline int ecc_sw_hamming_calculate(const unsigned char *buf,
+                                          unsigned int step_size,
+                                          unsigned char *code, bool sm_order)
+{
+       return -ENOTSUPP;
+}
+
+static inline int nand_ecc_sw_hamming_calculate(struct nand_device *nand,
+                                               const unsigned char *buf,
+                                               unsigned char *code)
+{
+       return -ENOTSUPP;
+}
+
+static inline int ecc_sw_hamming_correct(unsigned char *buf,
+                                        unsigned char *read_ecc,
+                                        unsigned char *calc_ecc,
+                                        unsigned int step_size, bool sm_order)
+{
+       return -ENOTSUPP;
+}
+
+static inline int nand_ecc_sw_hamming_correct(struct nand_device *nand,
+                                             unsigned char *buf,
+                                             unsigned char *read_ecc,
+                                             unsigned char *calc_ecc)
+{
+       return -ENOTSUPP;
+}
+
+#endif /* CONFIG_MTD_NAND_ECC_SW_HAMMING */
+
 #endif /* __MTD_NAND_ECC_SW_HAMMING_H__ */