2019-05-27 09:55:05 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2008-07-28 22:05:35 +04:00
# ifndef __SOUND_JACK_H
# define __SOUND_JACK_H
/*
* Jack abstraction layer
*
* Copyright 2008 Wolfson Microelectronics plc
*/
# include <sound/core.h>
struct input_dev ;
/**
2014-10-29 10:20:46 +03:00
* enum snd_jack_types - Jack types which can be reported
* @ SND_JACK_HEADPHONE : Headphone
* @ SND_JACK_MICROPHONE : Microphone
* @ SND_JACK_HEADSET : Headset
* @ SND_JACK_LINEOUT : Line out
* @ SND_JACK_MECHANICAL : Mechanical switch
* @ SND_JACK_VIDEOOUT : Video out
* @ SND_JACK_AVOUT : AV ( Audio Video ) out
* @ SND_JACK_LINEIN : Line in
* @ SND_JACK_BTN_0 : Button 0
* @ SND_JACK_BTN_1 : Button 1
* @ SND_JACK_BTN_2 : Button 2
* @ SND_JACK_BTN_3 : Button 3
* @ SND_JACK_BTN_4 : Button 4
* @ SND_JACK_BTN_5 : Button 5
2014-10-28 17:30:00 +03:00
*
* These values are used as a bitmask .
2009-01-03 19:56:56 +03:00
*
* Note that this must be kept in sync with the lookup table in
* sound / core / jack . c .
2008-07-28 22:05:35 +04:00
*/
enum snd_jack_types {
SND_JACK_HEADPHONE = 0x0001 ,
SND_JACK_MICROPHONE = 0x0002 ,
SND_JACK_HEADSET = SND_JACK_HEADPHONE | SND_JACK_MICROPHONE ,
2008-10-25 09:05:04 +04:00
SND_JACK_LINEOUT = 0x0004 ,
2008-12-10 16:55:49 +03:00
SND_JACK_MECHANICAL = 0x0008 , /* If detected separately */
2009-01-07 12:54:25 +03:00
SND_JACK_VIDEOOUT = 0x0010 ,
SND_JACK_AVOUT = SND_JACK_LINEOUT | SND_JACK_VIDEOOUT ,
2011-10-05 17:53:25 +04:00
SND_JACK_LINEIN = 0x0020 ,
2010-03-17 21:07:12 +03:00
/* Kept separate from switches to facilitate implementation */
SND_JACK_BTN_0 = 0x4000 ,
SND_JACK_BTN_1 = 0x2000 ,
SND_JACK_BTN_2 = 0x1000 ,
2010-09-06 19:08:56 +04:00
SND_JACK_BTN_3 = 0x0800 ,
SND_JACK_BTN_4 = 0x0400 ,
SND_JACK_BTN_5 = 0x0200 ,
2008-07-28 22:05:35 +04:00
} ;
2012-02-07 23:48:47 +04:00
/* Keep in sync with definitions above */
# define SND_JACK_SWITCH_TYPES 6
2008-07-28 22:05:35 +04:00
struct snd_jack {
2015-04-27 16:20:56 +03:00
struct list_head kctl_list ;
struct snd_card * card ;
2016-02-17 11:44:25 +03:00
const char * id ;
# ifdef CONFIG_SND_JACK_INPUT_DEV
struct input_dev * input_dev ;
2008-07-28 22:05:35 +04:00
int registered ;
int type ;
char name [ 100 ] ;
2010-09-06 19:08:56 +04:00
unsigned int key [ 6 ] ; /* Keep in sync with definitions above */
2016-02-17 11:44:25 +03:00
# endif /* CONFIG_SND_JACK_INPUT_DEV */
2009-04-14 18:13:58 +04:00
void * private_data ;
void ( * private_free ) ( struct snd_jack * ) ;
2008-07-28 22:05:35 +04:00
} ;
# ifdef CONFIG_SND_JACK
int snd_jack_new ( struct snd_card * card , const char * id , int type ,
2015-04-27 16:20:58 +03:00
struct snd_jack * * jack , bool initial_kctl , bool phantom_jack ) ;
2015-04-27 16:20:56 +03:00
int snd_jack_add_new_kctl ( struct snd_jack * jack , const char * name , int mask ) ;
2016-02-17 11:44:25 +03:00
# ifdef CONFIG_SND_JACK_INPUT_DEV
2008-07-28 22:05:35 +04:00
void snd_jack_set_parent ( struct snd_jack * jack , struct device * parent ) ;
2010-03-17 21:07:12 +03:00
int snd_jack_set_key ( struct snd_jack * jack , enum snd_jack_types type ,
int keytype ) ;
2016-02-17 11:44:25 +03:00
# endif
2008-07-28 22:05:35 +04:00
void snd_jack_report ( struct snd_jack * jack , int status ) ;
# else
static inline int snd_jack_new ( struct snd_card * card , const char * id , int type ,
2015-04-27 16:20:58 +03:00
struct snd_jack * * jack , bool initial_kctl , bool phantom_jack )
2008-07-28 22:05:35 +04:00
{
return 0 ;
}
2015-04-27 16:20:56 +03:00
static inline int snd_jack_add_new_kctl ( struct snd_jack * jack , const char * name , int mask )
{
return 0 ;
}
2016-02-17 11:44:25 +03:00
static inline void snd_jack_report ( struct snd_jack * jack , int status )
{
}
# endif
# if !defined(CONFIG_SND_JACK) || !defined(CONFIG_SND_JACK_INPUT_DEV)
2008-07-28 22:05:35 +04:00
static inline void snd_jack_set_parent ( struct snd_jack * jack ,
struct device * parent )
{
}
2014-12-08 17:44:47 +03:00
static inline int snd_jack_set_key ( struct snd_jack * jack ,
enum snd_jack_types type ,
int keytype )
{
return 0 ;
}
2016-02-17 11:44:25 +03:00
# endif /* !CONFIG_SND_JACK || !CONFIG_SND_JACK_INPUT_DEV */
2008-07-28 22:05:35 +04:00
# endif