cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

soc-jack.h (3822B)


      1/* SPDX-License-Identifier: GPL-2.0
      2 *
      3 * soc-jack.h
      4 *
      5 * Copyright (C) 2019 Renesas Electronics Corp.
      6 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      7 */
      8#ifndef __SOC_JACK_H
      9#define __SOC_JACK_H
     10
     11/**
     12 * struct snd_soc_jack_pin - Describes a pin to update based on jack detection
     13 *
     14 * @pin:    name of the pin to update
     15 * @mask:   bits to check for in reported jack status
     16 * @invert: if non-zero then pin is enabled when status is not reported
     17 * @list:   internal list entry
     18 */
     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 detection
     28 *
     29 * @min_mv: start voltage in mv
     30 * @max_mv: end voltage in mv
     31 * @jack_type: type of jack that is expected for this voltage
     32 * @debounce_time: debounce_time for jack, codec driver should wait for this
     33 *		duration before reading the adc for voltages
     34 * @list:   internal list entry
     35 */
     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 detection
     46 *
     47 * @gpio:         legacy gpio number
     48 * @idx:          gpio descriptor index within the function of the GPIO
     49 *                consumer device
     50 * @gpiod_dev:    GPIO consumer device
     51 * @name:         gpio name. Also as connection ID for the GPIO consumer
     52 *                device function name lookup
     53 * @report:       value to report when jack detected
     54 * @invert:       report presence in low state
     55 * @debounce_time: debounce time in ms
     56 * @wake:	  enable as wake source
     57 * @jack_status_check: callback function which overrides the detection
     58 *		       to provide more complex checks (eg, reading an
     59 *		       ADC).
     60 */
     61struct snd_soc_jack_gpio {
     62	unsigned int gpio;
     63	unsigned int idx;
     64	struct device *gpiod_dev;
     65	const char *name;
     66	int report;
     67	int invert;
     68	int debounce_time;
     69	bool wake;
     70
     71	/* private: */
     72	struct snd_soc_jack *jack;
     73	struct delayed_work work;
     74	struct notifier_block pm_notifier;
     75	struct gpio_desc *desc;
     76
     77	void *data;
     78	/* public: */
     79	int (*jack_status_check)(void *data);
     80};
     81
     82struct snd_soc_jack {
     83	struct mutex mutex;
     84	struct snd_jack *jack;
     85	struct snd_soc_card *card;
     86	struct list_head pins;
     87	int status;
     88	struct blocking_notifier_head notifier;
     89	struct list_head jack_zones;
     90};
     91
     92/* Jack reporting */
     93void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask);
     94int snd_soc_jack_add_pins(struct snd_soc_jack *jack, int count,
     95			  struct snd_soc_jack_pin *pins);
     96void snd_soc_jack_notifier_register(struct snd_soc_jack *jack,
     97				    struct notifier_block *nb);
     98void snd_soc_jack_notifier_unregister(struct snd_soc_jack *jack,
     99				      struct notifier_block *nb);
    100int snd_soc_jack_add_zones(struct snd_soc_jack *jack, int count,
    101			   struct snd_soc_jack_zone *zones);
    102int snd_soc_jack_get_type(struct snd_soc_jack *jack, int micbias_voltage);
    103#ifdef CONFIG_GPIOLIB
    104int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
    105			   struct snd_soc_jack_gpio *gpios);
    106int snd_soc_jack_add_gpiods(struct device *gpiod_dev,
    107			    struct snd_soc_jack *jack,
    108			    int count, struct snd_soc_jack_gpio *gpios);
    109void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
    110			     struct snd_soc_jack_gpio *gpios);
    111#else
    112static inline int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
    113					 struct snd_soc_jack_gpio *gpios)
    114{
    115	return 0;
    116}
    117
    118static inline int snd_soc_jack_add_gpiods(struct device *gpiod_dev,
    119					  struct snd_soc_jack *jack,
    120					  int count,
    121					  struct snd_soc_jack_gpio *gpios)
    122{
    123	return 0;
    124}
    125
    126static inline void snd_soc_jack_free_gpios(struct snd_soc_jack *jack, int count,
    127					   struct snd_soc_jack_gpio *gpios)
    128{
    129}
    130#endif
    131
    132#endif /* __SOC_JACK_H */