brintos

brintos / linux-shallow public Read only

0
0
Text · 2.2 KiB · 036ad3c Raw
84 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * PC-Speaker driver for Linux4 *5 * Copyright (C) 1993-1997  Michael Beck6 * Copyright (C) 1997-2001  David Woodhouse7 * Copyright (C) 2001-2008  Stas Sergeev8 */9 10#ifndef __PCSP_H__11#define __PCSP_H__12 13#include <linux/hrtimer.h>14#include <linux/i8253.h>15#include <linux/timex.h>16 17#define PCSP_SOUND_VERSION 0x400	/* read 4.00 */18#define PCSP_DEBUG 019 20/* default timer freq for PC-Speaker: 18643 Hz */21#define DIV_18KHZ 6422#define MAX_DIV DIV_18KHZ23#define CALC_DIV(d) (MAX_DIV >> (d))24#define CUR_DIV() CALC_DIV(chip->treble)25#define PCSP_MAX_TREBLE 126 27/* unfortunately, with hrtimers 37KHz does not work very well :( */28#define PCSP_DEFAULT_TREBLE 029#define MIN_DIV (MAX_DIV >> PCSP_MAX_TREBLE)30 31/* wild guess */32#define PCSP_MIN_LPJ 100000033#define PCSP_DEFAULT_SDIV (DIV_18KHZ >> 1)34#define PCSP_DEFAULT_SRATE (PIT_TICK_RATE / PCSP_DEFAULT_SDIV)35#define PCSP_INDEX_INC() (1 << (PCSP_MAX_TREBLE - chip->treble))36#define PCSP_CALC_RATE(i) (PIT_TICK_RATE / CALC_DIV(i))37#define PCSP_RATE() PCSP_CALC_RATE(chip->treble)38#define PCSP_MIN_RATE__1 MAX_DIV/PIT_TICK_RATE39#define PCSP_MAX_RATE__1 MIN_DIV/PIT_TICK_RATE40#define PCSP_MAX_PERIOD_NS (1000000000ULL * PCSP_MIN_RATE__1)41#define PCSP_MIN_PERIOD_NS (1000000000ULL * PCSP_MAX_RATE__1)42#define PCSP_CALC_NS(div) ({ \43	u64 __val = 1000000000ULL * (div); \44	do_div(__val, PIT_TICK_RATE); \45	__val; \46})47#define PCSP_PERIOD_NS() PCSP_CALC_NS(CUR_DIV())48 49#define PCSP_MAX_PERIOD_SIZE	(64*1024)50#define PCSP_MAX_PERIODS	51251#define PCSP_BUFFER_SIZE	(128*1024)52 53struct snd_pcsp {54	struct snd_card *card;55	struct snd_pcm *pcm;56	struct input_dev *input_dev;57	struct hrtimer timer;58	unsigned short port, irq, dma;59	spinlock_t substream_lock;60	struct snd_pcm_substream *playback_substream;61	unsigned int fmt_size;62	unsigned int is_signed;63	size_t playback_ptr;64	size_t period_ptr;65	atomic_t timer_active;66	int thalf;67	u64 ns_rem;68	unsigned char val61;69	int enable;70	int max_treble;71	int treble;72	int pcspkr;73};74 75extern struct snd_pcsp pcsp_chip;76 77extern enum hrtimer_restart pcsp_do_timer(struct hrtimer *handle);78extern void pcsp_sync_stop(struct snd_pcsp *chip);79 80extern int snd_pcsp_new_pcm(struct snd_pcsp *chip);81extern int snd_pcsp_new_mixer(struct snd_pcsp *chip, int nopcm);82 83#endif84