| /* |
| * drivers/amlogic/dvb/aml_dvb_extern.h |
| * |
| * Copyright (C) 2017 Amlogic, Inc. All rights reserved. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * This program is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for |
| * more details. |
| * |
| */ |
| |
| #ifndef __AML_DVB_EXTERN_H__ |
| #define __AML_DVB_EXTERN_H__ |
| |
| #include <linux/types.h> |
| #include <linux/mutex.h> |
| #include <linux/amlogic/aml_demod_common.h> |
| #include <linux/amlogic/aml_tuner.h> |
| #include <dvb_frontend.h> |
| |
| struct tuner_ops { |
| bool attached; |
| bool valid; /* There is hardware exist. */ |
| bool pre_inited; |
| |
| int refcount; |
| int index; |
| int delivery_system; /* The tuner's current delivery system. */ |
| int type; /* The tuner's current FE type. */ |
| |
| const struct tuner_module *module; |
| struct dvb_frontend fe; /* Used to attach tuner. */ |
| struct dvb_frontend *user; /* The current tuner user. */ |
| struct tuner_config cfg; |
| struct list_head list; |
| }; |
| |
| struct dvb_tuner { |
| struct tuner_ops *used; |
| struct list_head list; |
| struct mutex mutex; /* tuner ops mutex */ |
| int refcount; |
| |
| int (*attach)(struct dvb_tuner *tuner, bool attach); |
| struct tuner_ops *(*match)(struct dvb_tuner *tuner, int std); |
| int (*detect)(struct dvb_tuner *tuner); |
| int (*pre_init)(struct dvb_tuner *tuner); |
| }; |
| |
| struct demod_ops { |
| bool attached; |
| bool registered; |
| bool valid; /* There is hardware. */ |
| bool pre_inited; |
| bool external; /* external demod. */ |
| |
| int refcount; |
| int index; |
| void *ops; |
| int delivery_system; /* The demod's current delivery system. */ |
| int type; /* The demod's current FE type. */ |
| |
| const struct demod_module *module; |
| struct dvb_frontend *fe; /* The return value of the attach to init. */ |
| struct demod_config cfg; |
| struct list_head list; |
| }; |
| |
| struct dvb_demod { |
| struct dvb_adapter *dvb_adapter; |
| struct demod_ops *used; |
| struct list_head list; |
| struct mutex mutex; /* demod ops mutex */ |
| int refcount; |
| |
| int (*attach)(struct dvb_demod *demod, bool attach); |
| struct demod_ops *(*match)(struct dvb_demod *demod, int std); |
| int (*detect)(struct dvb_demod *demod); |
| int (*register_frontend)(struct dvb_demod *demod, bool regist); |
| int (*pre_init)(struct dvb_demod *demod); |
| }; |
| |
| #if (defined CONFIG_AMLOGIC_DVB_EXTERN) |
| struct dvb_frontend *dvb_tuner_attach(struct dvb_frontend *fe); |
| int dvb_tuner_detach(void); |
| |
| struct tuner_ops *dvb_tuner_ops_create(void); |
| void dvb_tuner_ops_destroy(struct tuner_ops *ops); |
| void dvb_tuner_ops_destroy_all(void); |
| int dvb_tuner_ops_add(struct tuner_ops *ops); |
| void dvb_tuner_ops_remove(struct tuner_ops *ops); |
| struct tuner_ops *dvb_tuner_ops_get_byindex(int index); |
| |
| struct dvb_tuner *get_dvb_tuners(void); |
| |
| int dvb_extern_register_frontend(struct dvb_adapter *adapter); |
| int dvb_extern_unregister_frontend(void); |
| |
| struct demod_ops *dvb_demod_ops_create(void); |
| void dvb_demod_ops_destroy(struct demod_ops *ops); |
| void dvb_demod_ops_destroy_all(void); |
| int dvb_demod_ops_add(struct demod_ops *ops); |
| void dvb_demod_ops_remove(struct demod_ops *ops); |
| struct demod_ops *dvb_demod_ops_get_byindex(int index); |
| |
| struct dvb_demod *get_dvb_demods(void); |
| #else |
| static inline __maybe_unused struct dvb_frontend *dvb_tuner_attach( |
| struct dvb_frontend *fe) |
| { |
| return NULL; |
| } |
| |
| static inline __maybe_unused int dvb_tuner_detach(void) |
| { |
| return -ENODEV; |
| } |
| |
| static inline __maybe_unused int dvb_extern_register_frontend( |
| struct dvb_adapter *adapter) |
| { |
| return -ENODEV; |
| } |
| |
| static inline __maybe_unused int dvb_extern_unregister_frontend(void) |
| { |
| return -ENODEV; |
| } |
| |
| static inline __maybe_unused struct tuner_ops *dvb_tuner_ops_create(void) |
| { |
| return NULL; |
| } |
| |
| static inline __maybe_unused void dvb_tuner_ops_destroy(struct tuner_ops *ops) |
| { |
| } |
| |
| static inline __maybe_unused void dvb_tuner_ops_destroy_all(void) |
| { |
| } |
| |
| static inline __maybe_unused int dvb_tuner_ops_add(struct tuner_ops *ops) |
| { |
| return -ENODEV; |
| } |
| |
| static inline __maybe_unused void dvb_tuner_ops_remove(struct tuner_ops *ops) |
| { |
| } |
| |
| static inline __maybe_unused struct tuner_ops *dvb_tuner_ops_get_byindex( |
| int index) |
| { |
| return NULL; |
| } |
| |
| static inline __maybe_unused struct demod_ops *dvb_demod_ops_create(void) |
| { |
| return NULL; |
| } |
| |
| static inline __maybe_unused void dvb_demod_ops_destroy(struct demod_ops *ops) |
| { |
| } |
| |
| static inline __maybe_unused void dvb_demod_ops_destroy_all(void) |
| { |
| } |
| |
| static inline __maybe_unused int dvb_demod_ops_add(struct demod_ops *ops) |
| { |
| return -ENODEV; |
| } |
| |
| static inline __maybe_unused void dvb_demod_ops_remove(struct demod_ops *ops) |
| { |
| } |
| |
| static inline __maybe_unused struct demod_ops *dvb_demod_ops_get_byindex( |
| int index) |
| { |
| return NULL; |
| } |
| #endif /* CONFIG_AMLOGIC_DVB_EXTERN */ |
| |
| #endif /* __AML_DVB_EXTERN_H__ */ |