Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/* gpio_sch.h - Descriptions of registers for Intel SCH GPIO controller */

/*
 * Copyright (c) 2015 Intel Corporation.
 *
 * Licensed 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 __GPIO_SCH_H__
#define __GPIO_SCH_H__

#include <stdint.h>
#include <nanokernel.h>
#include <gpio.h>

#define GPIO_SCH_REG_GEN		(0x00)
#define GPIO_SCH_REG_GIO		(0x04)
#define GPIO_SCH_REG_GLVL		(0x08)
#define GPIO_SCH_REG_GTPE		(0x0C)
#define GPIO_SCH_REG_GTNE		(0x10)
#define GPIO_SCH_REG_GGPE		(0x14)
#define GPIO_SCH_REG_GSMI		(0x18)
#define GPIO_SCH_REG_GTS		(0x1C)

struct gpio_sch_config {
	uint32_t regs;
	uint8_t bits;
	uint8_t stride[3];
};

#define GPIO_SCH_POLLING_STACK_SIZE 1024
#define GPIO_SCH_POLLING_TICKS (sys_clock_ticks_per_sec / 5)

struct gpio_sch_data {
	char __stack polling_stack[GPIO_SCH_POLLING_STACK_SIZE];
	sys_slist_t callbacks;
	struct nano_timer poll_timer;

	struct {
		uint32_t gtpe;
		uint32_t gtne;
	} int_regs;

	uint32_t cb_enabled;
	uint8_t poll;
	uint8_t stride[3];
};

#endif /* __GPIO_SCH_H__ */