nuttx/drivers/audio/cs4344.h
Tiago Medicci Serrano b4b0624f6a drivers/audio: add support for setting I2S's mclk on CS4344 codec
Set the mclk frequency on I2S lower half by 1) checking supported
sample rate, data width and mclk multiplier table and 2) setting
this value using the I2S_MCLKFREQUENCY macro. I2S driver may or
may not implement the i2s_mclkfrequency method for setting the
master clock.
2022-10-27 00:09:01 +08:00

105 lines
4.5 KiB
C

/****************************************************************************
* drivers/audio/cs4344.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __DRIVERS_AUDIO_CS4344_H
#define __DRIVERS_AUDIO_CS4344_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <nuttx/compiler.h>
#include <pthread.h>
#include <mqueue.h>
#include <nuttx/wqueue.h>
#include <nuttx/mutex.h>
#include <nuttx/fs/ioctl.h>
#ifdef CONFIG_AUDIO
/****************************************************************************
* Pre-Processor Definitions
****************************************************************************/
#ifndef ARRAY_SIZE
# define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
#endif
#define CS4344_DEFAULT_SAMPRATE 11025 /* Initial sample rate */
#define CS4344_DEFAULT_NCHANNELS 1 /* Initial number of channels */
#define CS4344_DEFAULT_BPSAMP 16 /* Initial bits per sample */
/****************************************************************************
* Public Types
****************************************************************************/
struct cs4344_dev_s
{
/* We are an audio lower half driver (We are also the upper "half" of
* the CS4344 driver with respect to the board lower half driver).
*
* Terminology:
* Our "lower" half audio instances will be called dev for the publicly
* visible version and "priv" for the version that only this driver
* knows. From the point of view of this driver, it is the board lower
* "half" that is referred to as "lower".
*/
struct audio_lowerhalf_s dev; /* CS4344 audio lower half (this device) */
/* Our specific driver data goes here */
FAR struct i2s_dev_s *i2s; /* I2S driver to use */
struct dq_queue_s pendq; /* Queue of pending buffers to be sent */
struct dq_queue_s doneq; /* Queue of sent buffers to be returned */
struct file mq; /* Message queue for receiving messages */
char mqname[16]; /* Our message queue name */
pthread_t threadid; /* ID of our thread */
uint32_t bitrate; /* Actual programmed bit rate */
mutex_t pendlock; /* Protect pendq */
uint16_t samprate; /* Configured samprate (samples/sec) */
uint8_t nchannels; /* Number of channels (1 or 2) */
uint8_t bpsamp; /* Bits per sample (8 or 16) */
uint32_t mclk_freq; /* Master clock frequency */
volatile uint8_t inflight; /* Number of audio buffers in-flight */
bool running; /* True: Worker thread is running */
bool paused; /* True: Playing is paused */
bool mute; /* True: Output is muted */
#ifndef CONFIG_AUDIO_EXCLUDE_STOP
bool terminating; /* True: Stop requested */
#endif
bool reserved; /* True: Device is reserved */
volatile int result; /* The result of the last transfer */
};
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#endif /* CONFIG_AUDIO */
#endif /* __DRIVERS_AUDIO_CS4344_H */