brintos

brintos / linux-shallow public Read only

0
0
Text · 3.7 KiB · 3a81d4b Raw
131 lines · c
1/* SPDX-License-Identifier: GPL-2.02 *3 * soc-jack.h4 *5 * Copyright (C) 2019 Renesas Electronics Corp.6 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>7 */8#ifndef __SOC_JACK_H9#define __SOC_JACK_H10 11/**12 * struct snd_soc_jack_pin - Describes a pin to update based on jack detection13 *14 * @pin:    name of the pin to update15 * @mask:   bits to check for in reported jack status16 * @invert: if non-zero then pin is enabled when status is not reported17 * @list:   internal list entry18 */19struct snd_soc_jack_pin {20	struct list_head list;21	const char *pin;22	int mask;23	bool invert;24};25 26/**27 * struct snd_soc_jack_zone - Describes voltage zones of jack detection28 *29 * @min_mv: start voltage in mv30 * @max_mv: end voltage in mv31 * @jack_type: type of jack that is expected for this voltage32 * @debounce_time: debounce_time for jack, codec driver should wait for this33 *		duration before reading the adc for voltages34 * @list:   internal list entry35 */36struct snd_soc_jack_zone {37	unsigned int min_mv;38	unsigned int max_mv;39	unsigned int jack_type;40	unsigned int debounce_time;41	struct list_head list;42};43 44/**45 * struct snd_soc_jack_gpio - Describes a gpio pin for jack detection46 *47 * @idx:          gpio descriptor index within the function of the GPIO48 *                consumer device49 * @gpiod_dev:    GPIO consumer device50 * @name:         gpio name. Also as connection ID for the GPIO consumer51 *                device function name lookup52 * @report:       value to report when jack detected53 * @invert:       report presence in low state54 * @debounce_time: debounce time in ms55 * @wake:	  enable as wake source56 * @jack_status_check: callback function which overrides the detection57 *		       to provide more complex checks (eg, reading an58 *		       ADC).59 */60struct snd_soc_jack_gpio {61	unsigned int idx;62	struct device *gpiod_dev;63	const char *name;64	int report;65	int invert;66	int debounce_time;67	bool wake;68 69	/* private: */70	struct snd_soc_jack *jack;71	struct delayed_work work;72	struct notifier_block pm_notifier;73	struct gpio_desc *desc;74 75	void *data;76	/* public: */77	int (*jack_status_check)(void *data);78};79 80struct snd_soc_jack {81	struct mutex mutex;82	struct snd_jack *jack;83	struct snd_soc_card *card;84	struct list_head pins;85	int status;86	struct blocking_notifier_head notifier;87	struct list_head jack_zones;88};89 90/* Jack reporting */91void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);92int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,93			  struct snd_soc_jack_pin *pins);94void snd_soc_jack_notifier_register(struct snd_soc_jack *jack,95				    struct notifier_block *nb);96void snd_soc_jack_notifier_unregister(struct snd_soc_jack *jack,97				      struct notifier_block *nb);98int snd_soc_jack_add_zones(struct snd_soc_jack *jack, int count,99			   struct snd_soc_jack_zone *zones);100int snd_soc_jack_get_type(struct snd_soc_jack *jack, int micbias_voltage);101#ifdef CONFIG_GPIOLIB102int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,103			   struct snd_soc_jack_gpio *gpios);104int snd_soc_jack_add_gpiods(struct device *gpiod_dev,105			    struct snd_soc_jack *jack,106			    int count, struct snd_soc_jack_gpio *gpios);107void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,108			     struct snd_soc_jack_gpio *gpios);109#else110static inline int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,111					 struct snd_soc_jack_gpio *gpios)112{113	return 0;114}115 116static inline int snd_soc_jack_add_gpiods(struct device *gpiod_dev,117					  struct snd_soc_jack *jack,118					  int count,119					  struct snd_soc_jack_gpio *gpios)120{121	return 0;122}123 124static inline void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,125					   struct snd_soc_jack_gpio *gpios)126{127}128#endif129 130#endif /* __SOC_JACK_H */131