mirror of
				https://github.com/qemu/qemu.git
				synced 2025-10-31 20:44:16 +00:00 
			
		
		
		
	 c79aa350ea
			
		
	
	
		c79aa350ea
		
	
	
	
	
		
			
			NPCM7XX models have been commited after the conversion from
commit 8063396bf3 ("Use OBJECT_DECLARE_SIMPLE_TYPE when possible").
Manually convert them.
Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20230109140306.23161-11-philmd@linaro.org
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
		
	
			
		
			
				
	
	
		
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Nuvoton NPCM7xx PWM Module
 | |
|  *
 | |
|  * Copyright 2020 Google LLC
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or modify it
 | |
|  * under the terms of the GNU General Public License as published by the
 | |
|  * Free Software Foundation; either version 2 of the License, or
 | |
|  * (at your option) any later version.
 | |
|  *
 | |
|  * This program is distributed in the hope that it will be useful, but WITHOUT
 | |
|  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 | |
|  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
 | |
|  * for more details.
 | |
|  */
 | |
| #ifndef NPCM7XX_PWM_H
 | |
| #define NPCM7XX_PWM_H
 | |
| 
 | |
| #include "hw/clock.h"
 | |
| #include "hw/sysbus.h"
 | |
| #include "hw/irq.h"
 | |
| 
 | |
| /* Each PWM module holds 4 PWM channels. */
 | |
| #define NPCM7XX_PWM_PER_MODULE 4
 | |
| 
 | |
| /*
 | |
|  * Number of registers in one pwm module. Don't change this without increasing
 | |
|  * the version_id in vmstate.
 | |
|  */
 | |
| #define NPCM7XX_PWM_NR_REGS (0x54 / sizeof(uint32_t))
 | |
| 
 | |
| /*
 | |
|  * The maximum duty values. Each duty unit represents 1/NPCM7XX_PWM_MAX_DUTY
 | |
|  * cycles. For example, if NPCM7XX_PWM_MAX_DUTY=1,000,000 and a PWM has a duty
 | |
|  * value of 100,000 the duty cycle for that PWM is 10%.
 | |
|  */
 | |
| #define NPCM7XX_PWM_MAX_DUTY 1000000
 | |
| 
 | |
| typedef struct NPCM7xxPWMState NPCM7xxPWMState;
 | |
| 
 | |
| /**
 | |
|  * struct NPCM7xxPWM - The state of a single PWM channel.
 | |
|  * @module: The PWM module that contains this channel.
 | |
|  * @irq: GIC interrupt line to fire on expiration if enabled.
 | |
|  * @running: Whether this PWM channel is generating output.
 | |
|  * @inverted: Whether this PWM channel is inverted.
 | |
|  * @index: The index of this PWM channel.
 | |
|  * @cnr: The counter register.
 | |
|  * @cmr: The comparator register.
 | |
|  * @pdr: The data register.
 | |
|  * @pwdr: The watchdog register.
 | |
|  * @freq: The frequency of this PWM channel.
 | |
|  * @duty: The duty cycle of this PWM channel. One unit represents
 | |
|  *   1/NPCM7XX_MAX_DUTY cycles.
 | |
|  */
 | |
| typedef struct NPCM7xxPWM {
 | |
|     NPCM7xxPWMState         *module;
 | |
| 
 | |
|     qemu_irq                irq;
 | |
| 
 | |
|     bool                    running;
 | |
|     bool                    inverted;
 | |
| 
 | |
|     uint8_t                 index;
 | |
|     uint32_t                cnr;
 | |
|     uint32_t                cmr;
 | |
|     uint32_t                pdr;
 | |
|     uint32_t                pwdr;
 | |
| 
 | |
|     uint32_t                freq;
 | |
|     uint32_t                duty;
 | |
| } NPCM7xxPWM;
 | |
| 
 | |
| /**
 | |
|  * struct NPCM7xxPWMState - Pulse Width Modulation device state.
 | |
|  * @parent: System bus device.
 | |
|  * @iomem: Memory region through which registers are accessed.
 | |
|  * @clock: The PWM clock.
 | |
|  * @pwm: The PWM channels owned by this module.
 | |
|  * @duty_gpio_out: The duty cycle of each PWM channels as a output GPIO.
 | |
|  * @ppr: The prescaler register.
 | |
|  * @csr: The clock selector register.
 | |
|  * @pcr: The control register.
 | |
|  * @pier: The interrupt enable register.
 | |
|  * @piir: The interrupt indication register.
 | |
|  */
 | |
| struct NPCM7xxPWMState {
 | |
|     SysBusDevice parent;
 | |
| 
 | |
|     MemoryRegion iomem;
 | |
| 
 | |
|     Clock       *clock;
 | |
|     NPCM7xxPWM  pwm[NPCM7XX_PWM_PER_MODULE];
 | |
|     qemu_irq    duty_gpio_out[NPCM7XX_PWM_PER_MODULE];
 | |
| 
 | |
|     uint32_t    ppr;
 | |
|     uint32_t    csr;
 | |
|     uint32_t    pcr;
 | |
|     uint32_t    pier;
 | |
|     uint32_t    piir;
 | |
| };
 | |
| 
 | |
| #define TYPE_NPCM7XX_PWM "npcm7xx-pwm"
 | |
| OBJECT_DECLARE_SIMPLE_TYPE(NPCM7xxPWMState, NPCM7XX_PWM)
 | |
| 
 | |
| #endif /* NPCM7XX_PWM_H */
 |