~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/sound/ac97/controller.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0
  2  *
  3  * Copyright (C) 2016 Robert Jarzmik <robert.jarzmik@free.fr>
  4  */
  5 
  6 #ifndef AC97_CONTROLLER_H
  7 #define AC97_CONTROLLER_H
  8 
  9 #include <linux/device.h>
 10 #include <linux/list.h>
 11 
 12 #define AC97_BUS_MAX_CODECS 4
 13 #define AC97_SLOTS_AVAILABLE_ALL 0xf
 14 
 15 struct ac97_controller_ops;
 16 
 17 /**
 18  * struct ac97_controller - The AC97 controller of the AC-Link
 19  * @ops:                the AC97 operations.
 20  * @controllers:        linked list of all existing controllers.
 21  * @adap:               the shell device ac97-%d, ie. ac97 adapter
 22  * @nr:                 the number of the shell device
 23  * @slots_available:    the mask of accessible/scanable codecs.
 24  * @parent:             the device providing the AC97 controller.
 25  * @codecs:             the 4 possible AC97 codecs (NULL if none found).
 26  * @codecs_pdata:       platform_data for each codec (NULL if no pdata).
 27  *
 28  * This structure is internal to AC97 bus, and should not be used by the
 29  * controllers themselves, excepting for using @dev.
 30  */
 31 struct ac97_controller {
 32         const struct ac97_controller_ops *ops;
 33         struct list_head controllers;
 34         struct device adap;
 35         int nr;
 36         unsigned short slots_available;
 37         struct device *parent;
 38         struct ac97_codec_device *codecs[AC97_BUS_MAX_CODECS];
 39         void *codecs_pdata[AC97_BUS_MAX_CODECS];
 40 };
 41 
 42 /**
 43  * struct ac97_controller_ops - The AC97 operations
 44  * @reset:      Cold reset of the AC97 AC-Link.
 45  * @warm_reset: Warm reset of the AC97 AC-Link.
 46  * @read:       Read of a single AC97 register.
 47  *              Returns the register value or a negative error code.
 48  * @write:      Write of a single AC97 register.
 49  *
 50  * These are the basic operation an AC97 controller must provide for an AC97
 51  * access functions. Amongst these, all but the last 2 are mandatory.
 52  * The slot number is also known as the AC97 codec number, between 0 and 3.
 53  */
 54 struct ac97_controller_ops {
 55         void (*reset)(struct ac97_controller *adrv);
 56         void (*warm_reset)(struct ac97_controller *adrv);
 57         int (*write)(struct ac97_controller *adrv, int slot,
 58                      unsigned short reg, unsigned short val);
 59         int (*read)(struct ac97_controller *adrv, int slot, unsigned short reg);
 60 };
 61 
 62 #if IS_ENABLED(CONFIG_AC97_BUS_NEW)
 63 struct ac97_controller *snd_ac97_controller_register(
 64         const struct ac97_controller_ops *ops, struct device *dev,
 65         unsigned short slots_available, void **codecs_pdata);
 66 void snd_ac97_controller_unregister(struct ac97_controller *ac97_ctrl);
 67 #else
 68 static inline struct ac97_controller *
 69 snd_ac97_controller_register(const struct ac97_controller_ops *ops,
 70                              struct device *dev,
 71                              unsigned short slots_available,
 72                              void **codecs_pdata)
 73 {
 74         return ERR_PTR(-ENODEV);
 75 }
 76 
 77 static inline void
 78 snd_ac97_controller_unregister(struct ac97_controller *ac97_ctrl)
 79 {
 80 }
 81 #endif
 82 
 83 #endif
 84 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php