/* SPDX-License-Identifier: (GPL-2.0+ OR MIT) */
/*
 * Copyright (c) 2019 Amlogic, Inc. All rights reserved.
 */

#ifndef __AML_DTVDEMOD_H__
#define __AML_DTVDEMOD_H__

#include <linux/amlogic/aml_demod_common.h>
#include <media/dvb_frontend.h>

struct demod_module {
	char *name;

	u8 id;
	u8 type[AML_MAX_FE]; /* FE type supported by demod. */

	void *attach_symbol; /* The actual attach function symbolic address. */

	struct dvb_frontend *(*attach)(const struct demod_module *module,
			const struct demod_config *cfg);
	int (*detach)(const struct demod_module *module);
	int (*match)(const struct demod_module *module, int std);
	int (*detect)(const struct demod_config *cfg);
	int (*register_frontend)(struct dvb_adapter *dvb,
			struct dvb_frontend *fe);
	int (*unregister_frontend)(struct dvb_frontend *fe);
};

#ifndef MODULE
#if (defined CONFIG_AMLOGIC_DTV_DEMOD ||\
		defined CONFIG_AMLOGIC_DTV_DEMOD_MODULE)
struct dvb_frontend *aml_dtvdm_attach(const struct demod_config *cfg);
#else
static inline __maybe_unused struct dvb_frontend *aml_dtvdm_attach(
		const struct demod_config *cfg)
{
	return NULL;
}
#endif
#endif

#if (defined CONFIG_AMLOGIC_DVB_EXTERN ||\
		defined CONFIG_AMLOGIC_DVB_EXTERN_MODULE)
int dvb_demod_module_count(void);
bool dvb_demod_is_required(enum dtv_demod_type type);
enum dtv_demod_type aml_get_dtvdemod_type(const char *name);
int aml_get_dts_demod_config(struct device_node *node,
		struct demod_config *cfg, int index);
void aml_show_demod_config(const char *title, const struct demod_config *cfg);
const struct demod_module *aml_get_demod_module(enum dtv_demod_type type);
#else

static inline __maybe_unused bool dvb_demod_is_required(enum dtv_demod_type type)
{
	return false;
}

static inline __maybe_unused int dvb_demod_module_count(void)
{
	return -ENODEV;
}

static inline __maybe_unused enum dtv_demod_type aml_get_dtvdemod_type(
		const char *name)
{
	return AM_DTV_DEMOD_NONE;
}

static inline __maybe_unused int aml_get_dts_demod_config(
		struct device_node *node, struct demod_config *cfg, int index)
{
	return -ENODEV;
}

static inline __maybe_unused void aml_show_demod_config(const char *title,
		const struct demod_config *cfg)
{
}

static inline __maybe_unused const struct demod_module *aml_get_demod_module(
		enum dtv_demod_type type)
{
	return NULL;
}

#endif

/* For attach demod driver end*/
#endif /* __AML_DTVDEMOD_H__ */
