cxd56xx: spresense: Add some improvements and fix bugs for Spresense board

- Add new functions of GNSS
- Support the lower PWM frequency
- Add CONFIG_CPUFREQ_RELEASE_LOCK
- Add high speed ADC support
- Add HPADC input gain configuration
- Add eMMC device
- Frame buffer support
- Fix SD/GNSS/sensor drivers not worked
- Build errors
- Fix nxstyle issues
This commit is contained in:
SPRESENSE 2020-07-27 14:09:21 +09:00 committed by Alin Jerpelea
parent 500ead8101
commit d560ce65ff
108 changed files with 3649 additions and 2511 deletions

View file

@ -429,6 +429,7 @@ config ARCH_CHIP_CXD56XX
select ARCH_HAVE_MULTICPU
select ARCH_GLOBAL_IRQDISABLE
select ARCH_HAVE_SDIO if MMCSD
select ARCH_HAVE_MATH_H
---help---
Sony CXD56XX (ARM Cortex-M4) architectures

View file

@ -527,12 +527,47 @@ extern "C"
#define CXD56_GNSS_IOCTL_GET_VAR_EPHEMERIS 49
/* Set usecase mode
* This command must be issued in idle mode.
*
* param[in] arg
* The usecase definitions
*/
#define CXD56_GNSS_IOCTL_SET_USECASE 50
/* Get usecase mode
*
* param[out] arg
* The usecase definitions
*/
#define CXD56_GNSS_IOCTL_GET_USECASE 51
/* Set enable or disable of 1PPS output
* This command must be issued in idle mode.
*
* param[in] arg
* enable(1) or disable(0)
*/
#define CXD56_GNSS_IOCTL_SET_1PPS_OUTPUT 52
/**
* Get the current 1PPS output setting
*
* @param[out] arg
* enable(1) or disable(0)
*/
#define CXD56_GNSS_IOCTL_GET_1PPS_OUTPUT 53
/* check macros for GNSS commands */
#define CXD56_GNSS_IOCTL_INVAL 0
#define CXD56_GNSS_IOCTL_MAX 50
#define CXD56_GNSS_IOCTL_MAX 54
/* Same value to GD Start mode CXD56_GNSS_STMOD_XXXX for GD_Start */
/* Same value to GD Start mode CXD56_GNSS_STMOD_XXXX for fw_gd_start */
#define CXD56_GNSS_STMOD_COLD 0 /* Cold Start */
#define CXD56_GNSS_STMOD_WARM 1 /* Warm Start */
@ -593,6 +628,10 @@ extern "C"
#define CXD56_GNSS_READ_OFFSET_DCREPORT 0x9800
/* Offset for SAR/RLM */
#define CXD56_GNSS_READ_OFFSET_SARRLM 0x9900
/* Offset for Spectrum data */
#define CXD56_GNSS_READ_OFFSET_SPECTRUM 0xa000
@ -643,6 +682,10 @@ extern "C"
#define CXD56_GNSS_SIG_DCREPORT 15
/* Signal type is GAL SAR/RLM */
#define CXD56_GNSS_SIG_SARRLM 16
/****************************************************************************
* Public Types
****************************************************************************/

View file

@ -98,9 +98,13 @@ extern "C"
/* GNSS oribital information data type, almanac & ephemeris */
#define CXD56_GNSS_DATA_GPS 0 /* GPS data type */
#define CXD56_GNSS_DATA_GLONASS 1 /* Glonass data type */
#define CXD56_GNSS_DATA_QZSSL1CA 2 /* QZSS/L1CA data type */
#define CXD56_GNSS_DATA_GPS 0 /* GPS data type */
#define CXD56_GNSS_DATA_GLONASS 1 /* Glonass data type */
#define CXD56_GNSS_DATA_QZSSL1CA 2 /* QZSS/L1CA data type */
#define CXD56_GNSS_DATA_GALILEO 3 /* GALILEO data type */
#define CXD56_GNSS_DATA_BEIDOU_D1 4 /* BEIDOU D1 data type */
#define CXD56_GNSS_DATA_BEIDOU_D2 5 /* BEIDOU D2 data type */
#define CXD56_GNSS_DATA_BEIDOU_ALM 6 /* BEIDOU Almanac data type */
/* GNSS satellite status */
@ -111,6 +115,37 @@ extern "C"
#define CXD56_GNSS_SV_STAT_VISIBLE (1 << 3) /* Visible */
#define CXD56_GNSS_SV_STAT_SUB_CH (1 << 4) /* Sub Ch */
/* GNSS carrier phase status */
#define CXD56_GNSS_SV_PHASESTAT_NONE (0) /* None */
#define CXD56_GNSS_SV_PHASESTAT_UNKNOWN (1 << 0) /* Unknown */
#define CXD56_GNSS_SV_PHASESTAT_VALID (1 << 1) /* Valid */
#define CXD56_GNSS_SV_PHASESTAT_RESET (1 << 2) /* Reset detected */
#define CXD56_GNSS_SV_PHASESTAT_CYCLE_SLIP (1 << 3) /* Cycle Slip detected */
#define CXD56_GNSS_SV_PHASESTAT_HALF_CYCLE_RESOLVED (1 << 4)
/* Half cycle ambiguity resolved */
/* GNSS Validity of raw measurement */
#define CXD56_GNSS_SV_RAWSTAT_NONE (0) /* None */
#define CXD56_GNSS_SV_RAWSTAT_DOPPLER (1 << 0) /* doppler */
#define CXD56_GNSS_SV_RAWSTAT_PSEUDORANGE (1 << 1) /* pseudorange */
#define CXD56_GNSS_SV_RAWSTAT_CARRIERPHASE (1 << 2) /* carrier phase */
#define CXD56_GNSS_SV_RAWSTAT_SVTIME (1 << 3) /* received sv time */
#define CXD56_GNSS_SV_RAWSTAT_SVCLOCKPARAM (1 << 4) /* correction parameter of sv clock*/
#define CXD56_GNSS_SV_RAWSTAT_SVPOSVEL (1 << 5) /* sv position and velocity */
/* GNSS Cause of measurement invalidity */
#define CXD56_GNSS_SV_INVCAUS_NOT_TRACKED (1 << 0) /* not tracked */
#define CXD56_GNSS_SV_INVCAUS_NO_SIGNAL (1 << 1) /* no signal */
#define CXD56_GNSS_SV_INVCAUS_NO_EPHEMERIS (1 << 2) /* no ephemeris */
#define CXD56_GNSS_SV_INVCAUS_CLK_NOT_ADJUSTED (1 << 3) /* clock not adjusted */
#define CXD56_GNSS_SV_INVCAUS_BEFORE_TOW_LOCKED (1 << 4) /* before TOW locked */
#define CXD56_GNSS_SV_INVCAUS_SPEED_LIMIT (1 << 5) /* speed limit */
#define CXD56_GNSS_SV_INVCAUS_NOT_SUPPORTED (1 << 6) /* not supported */
#define CXD56_GNSS_SV_INVCAUS_OTHER (1 << 7) /* other */
/* GNSS 1PPS synchronization status (internal use) */
#define CXD56_GNSS_PPS_NOT_ADJUSTED 0 /* not adjusted */
@ -153,12 +188,18 @@ extern "C"
/* AGPS Measurement tracking data */
#define CXD56_GNSS_SUPL_TRK_DATA_SIZE (16)
#define CXD56_GNSS_SUPL_TRK_DATA_SIZE (24)
/* PVTLOG Max stored log number */
#define CXD56_GNSS_PVTLOG_MAXNUM 170
/* PVTLOG notify threshold of the stored data */
#define CXD56_GNSS_PVTLOG_THRESHOLD_FULL 0 /* Limit of the storage size */
#define CXD56_GNSS_PVTLOG_THRESHOLD_HALF 1 /* 1/2 of the Storage size */
#define CXD56_GNSS_PVTLOG_THRESHOLD_ONE_DATA 2 /* Each log stored */
/* assist bit fields */
#define CXD56_GNSS_PVT_RECEIVER_ASSIST_NONE (0x00)
@ -225,7 +266,7 @@ struct cxd56_gnss_var_s
/* Extra data for debugging */
#define CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA_SIZE (520)
#define CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA_SIZE (568)
#define CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA \
uint8_t extra[CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA_SIZE]
#define CXD56_GNSS_PVT_SV_EXTRA_DATA_SIZE 40
@ -246,88 +287,304 @@ struct cxd56_gnss_var_s
struct cxd56_gnss_receiver_s
{
uint8_t type; /* [out] Position type; 0:Invalid, 1:GNSS,
* 2:IMES, 3:user set, 4:previous
*/
uint8_t dgps; /* [out] FALSE:SGPS, TRUE:DGPS */
uint8_t pos_fixmode; /* [out] 1:Invalid, 2:2D, 3:3D */
uint8_t vel_fixmode; /* [out] 1:Invalid, 2:2D VZ, 3:2D Offset,
* 4:3D, 5:1D, 6:PRED
*/
uint8_t numsv; /* [out] Nr of visible satellites */
uint8_t numsv_tracking; /* [out] Nr of tracking satellites */
uint8_t numsv_calcpos; /* [out] Nr of satellites to calculate position */
uint8_t numsv_calcvel; /* [out] Nr of satellites to calculate velocity */
uint8_t assist; /* [out] bit field
* [7..5]Reserved
* [4]AEP Velocity
* [3]AEP Position
* [2]CEP Velocity
* [1]CEP Position,
* [0]user set
*/
uint8_t pos_dataexist; /* [out] 0:none, 1:exist */
uint16_t svtype; /* [out] Using sv system, bit field;
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:Beidu,
* bit7:Galileo
*/
uint16_t pos_svtype; /* [out] using sv system, bit field;
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:Beidu,
* bit7:Galileo
* */
uint16_t vel_svtype; /* [out] using sv system, bit field; bit0:GPS,
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:Beidu,
* bit7:Galileo
*/
uint32_t possource; /* [out] position source; 0:Invalid, 1:GNSS,
* 2:IMES, 3:user set, 4:previous
*/
/* [out] Position type; 0:Invalid, 1:GNSS,
* 2:IMES, 3:user set, 4:previous
*/
int32_t tcxo_offset; /* [out] TCXO offset[Hz] */
struct cxd56_gnss_dop_s pos_dop; /* [out] DOPs of Position */
struct cxd56_gnss_dop_s vel_idx; /* [out] Weighted DOPs of Velocity */
struct cxd56_gnss_var_s pos_accuracy; /* [out] Accuracy of Position */
double latitude; /* [out] Latitude [degree] */
double longitude; /* [out] Longitude [degree] */
double altitude; /* [out] Altitude [m] */
double geoid; /* [out] Geoid height [m] */
float velocity; /* [out] Velocity [m/s] */
float direction; /* [out] Direction [degree] */
struct cxd56_gnss_date_s date; /* [out] Current day (UTC) */
struct cxd56_gnss_time_s time; /* [out] Current time (UTC) */
struct cxd56_gnss_date_s gpsdate; /* [out] Current day (GPS) */
struct cxd56_gnss_time_s gpstime; /* [out] Current time (GPS) */
struct cxd56_gnss_time_s receivetime; /* [out] Receive time (UTC) */
uint32_t priv; /* [out] For internal use */
CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA; /* [out] Receiver extra data */
uint8_t type;
/* [out] FALSE:SGPS, TRUE:DGPS */
uint8_t dgps;
/* [out] 1:Invalid, 2:2D, 3:3D */
uint8_t pos_fixmode;
/* [out] 1:Invalid, 2:2D VZ, 3:2D Offset,
* 4:3D, 5:1D, 6:PRED
*/
uint8_t vel_fixmode;
/* [out] Nr of visible satellites */
uint8_t numsv;
/* [out] Nr of tracking satellites */
uint8_t numsv_tracking;
/* [out] Nr of satellites to calculate position */
uint8_t numsv_calcpos;
/* [out] Nr of satellites to calculate velocity */
uint8_t numsv_calcvel;
/* [out] bit field
* [7..5]Reserved
* [4]AEP Velocity
* [3]AEP Position
* [2]CEP Velocity
* [1]CEP Position,
* [0]user set
*/
uint8_t assist;
/* [out] 0:none, 1:exist */
uint8_t pos_dataexist;
/* [out] Using sv system, bit field;
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:BeiDou,
* bit7:Galileo
*/
uint16_t svtype;
/* [out] using sv system, bit field;
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:BeiDou,
* bit7:Galileo
*/
uint16_t pos_svtype;
/* [out] using sv system, bit field; bit0:GPS,
* bit0:GPS, bit1:GLONASS, bit2:SBAS,
* bit3:QZSS_L1CA, bit4:IMES,
* bit5:QZSS_L1SAIF, bit6:BeiDou,
* bit7:Galileo
*/
uint16_t vel_svtype;
/* [out] position source; 0:Invalid, 1:GNSS,
* 2:IMES, 3:user set, 4:previous
*/
uint32_t possource;
/* [out] TCXO offset[Hz] */
float tcxo_offset;
/* [out] DOPs of Position */
struct cxd56_gnss_dop_s pos_dop;
/* [out] Weighted DOPs of Velocity */
struct cxd56_gnss_dop_s vel_idx;
/* [out] Accuracy of Position */
struct cxd56_gnss_var_s pos_accuracy;
/* [out] Latitude [degree] */
double latitude;
/* [out] Longitude [degree] */
double longitude;
/* [out] Altitude [m] */
double altitude;
/* [out] Geoid height [m] */
double geoid;
/* [out] Velocity [m/s] */
float velocity;
/* [out] Direction [degree] */
float direction;
/* [out] Current day (UTC) */
struct cxd56_gnss_date_s date;
/* [out] Current time (UTC) */
struct cxd56_gnss_time_s time;
/* [out] Current day (GPS) */
struct cxd56_gnss_date_s gpsdate;
/* [out] Current time (GPS) */
struct cxd56_gnss_time_s gpstime;
/* [out] Receive time (UTC) */
struct cxd56_gnss_time_s receivetime;
/* [out] For internal use */
uint32_t priv;
/* [out] Leap Second[sec] */
int8_t leap_sec;
/* [out] elapsed time
* from reset in ns
*/
uint64_t time_ns;
/* [out] elapsed time
* from GPS epoch in ns
*/
int64_t full_bias_ns;
/* [out] Receiver extra data */
CXD56_GNSS_PVT_RECEIVER_EXTRA_DATA;
};
/* satellite position (ECEF) */
struct cxd56_gnss_pvt_sv_pos_s
{
double dx; /* X [m] */
double dy; /* Y [m] */
double dz; /* Z [m] */
};
/* satellite velocity (ECEF) */
struct cxd56_gnss_pvt_sv_vel_s
{
float fvx; /* Vx [m/s] */
float fvy; /* Vy [m/s] */
float fvz; /* Vz [m/s] */
};
/* GNSS satellite data */
struct cxd56_gnss_sv_s
{
uint16_t type; /* [out] Using sv system, bit field; bit0:GPS,
* bit1:GLONASS, bit2:SBAS, bit3:QZSS_L1CA,
* bit4:IMES, bit5:QZSS_L1SAIF, bit6:Beidu,
* bit7:Galileo
* same as struct cxd56_gnss_receiver_s::svtype
*/
uint8_t svid; /* [out] Satellite id */
uint8_t stat; /* Using sv info, bit field; bit0:tracking,
* bit1:positioning, bit2:calculating velocity,
* bit3:visible satellite
*/
uint8_t elevation; /* [out] Elevation [degree] */
int16_t azimuth; /* [out] Azimuth [degree] */
float siglevel; /* [out] CN */
/* [out] Using sv system, bit field; bit0:GPS,
* bit1:GLONASS, bit2:SBAS, bit3:QZSS_L1CA,
* bit4:IMES, bit5:QZSS_L1SAIF, bit6:BeiDou,
* bit7:Galileo
* same as struct cxd56_gnss_receiver_s::svtype
*/
CXD56_GNSS_PVT_SV_EXTRA_DATA; /* [out] Sv extra data */
uint16_t type;
/* [out] Satellite id */
uint8_t svid;
/* Using sv info, bit field; bit0:tracking,
* bit1:positioning, bit2:calculating velocity,
* bit3:visible satellite
*/
uint8_t stat;
/* [out] Azimuth [degree] */
int16_t azimuth;
/* [out] carrier phase status, bit field;
* bit0: unknown, bit1: valid, bit2: reset,
* bit3: cycle slip (Loss of Lock Indicator)
*/
uint8_t phase_stat;
/* [out] navigation message of the satellite vehicle
* bit0: 1 = almanac OK, 0 = almanac NG
*/
uint8_t nav_message_info;
/* [out] Validity of raw measurement, bit field;
* bit0: doppler, bit1: pseudorange,
* bit2: carrierphase, bit3: svtime,
* bit4: svClockOffset & svClockDrift
* bit5: svpos & svvel
*/
uint8_t raw_stat;
/* [out] Cause of measurement invalidity, bit field;
* bit0: not tracked, bit1: no signal,
* bit2: no ephemeris
* bit3: clock not adjusted,
* bit4: before TOW locked
* bit5: not supported, bit6: speed limit
*/
uint8_t invalid_cause;
/* [out] Elevation [degree] */
uint8_t elevation;
/* [out] Frequency Channel (Glonass) */
int8_t freqchannel;
/* [out] CN */
float siglevel;
/* [out] Doppler frequency [Hz] */
float doppler;
/* [out] Pseudo range [m] */
double pseudo_range;
/* [out] Carrier phase [cycle] */
double carrier_phase;
/* [out] received sv time in [sec] */
double sv_time;
/* [out] Time tracked[sec] */
float timetracked;
/* [out] Satellite clock offset [m] (Af0 * C) */
float svclockoffset;
/* [out] Satellite clock drift [m/s] (Af1 * C) */
float svclockdrift;
/* [out] satellite position (ECEF) */
struct cxd56_gnss_pvt_sv_pos_s svpos;
/* [out] satellite velocity (ECEF) */
struct cxd56_gnss_pvt_sv_vel_s svvel;
/* [out] Sv extra data */
CXD56_GNSS_PVT_SV_EXTRA_DATA;
};
/* Positioning data with SV data */
@ -353,6 +610,26 @@ struct cxd56_gnss_dcreport_data_s
uint8_t svid; /* [out] Satellite id */
};
/* Galileo SAR/RLM data */
struct cxd56_gnss_sarrlm_data_s
{
uint8_t svid; /* SVID */
uint8_t rlmtype; /* 0x0:Short, 0x1:Long */
uint8_t datacmplt; /* 0xf:Short, 0xff:Long */
uint8_t msgcode; /* Massage code(4bit) */
uint32_t beacon_id1; /* Beacon ID (bit[31:0]) */
uint32_t beacon_id2; /* Beacon ID (bit[59:32]) */
uint32_t param1; /* Short:16bit, Long:96bit(bit[31:0]) */
uint32_t param2; /* Long:96bit(bit[63:31]) */
uint32_t param3; /* Long:96bit(bit[95:63]) */
};
struct cxd56_gnss_gal_sarrlm_s
{
struct cxd56_gnss_sarrlm_data_s data;
};
/* SF_EVENT_GNSS_MEASUREMENT_VALUE */
/* SUPL tracking data */
@ -461,16 +738,22 @@ struct cxd56_rtk_sv_s
uint32_t gnss; /* [out] GNSS type (CXD56_GNSS_GNSS_XXX) */
int8_t svid; /* [out] Satellite id */
int8_t fdmch; /* [out] Frequency slot for GLONASS (-7 ... 6) */
int16_t cn; /* [out] [0.01dBHz] CN */
int8_t polarity; /* [out] Carrier polarity
* (0: not inverted, 1: inverted)
*/
int16_t cn; /* [out] [0.01dBHz] CN */
int8_t lastpreamble; /* [out] Parity of last premable (0: ok, 1: ng) */
int8_t lli; /* [out] Lock loss indicator
* (0: no lock loss, 1: lock loss)
*/
int8_t ch; /* [out] TRK channel number */
float c2p; /* [out] C2P (0 ... 1.0) */
uint8_t phase_stat; /* [out] carrier phase status, bit field;
* bit0: unknown, bit1: valid, bit2: reset,
* bit3: cycle slip (Loss of Lock Indicator)
*/
float timetracked; /* [out] Tracked time[sec] */
double sv_time; /* [out] received transmit time of the SV[sec] */
float doppler; /* [out] [Hz] Doppler shift */
};
@ -604,6 +887,16 @@ struct cxd56_gnss_sbasdata_s
uint8_t sbasmsg[CXD56_GNSS_SBAS_MESSAGE_DATA_LEN]; /* sbas message data */
};
/* RTK Setting Parameter */
struct cxd56_gnss_rtk_setting_s
{
int interval; /* Interval */
uint32_t gnss; /* Satellite system */
int eph_out; /* Ephemeris out enable */
uint64_t sbas_out; /* sbas out enable */
};
/* PVTLog Parameter */
/* Latitude of PVT data */

View file

@ -26,6 +26,18 @@ config CXD56_WLCSP
endchoice
choice
prompt "CXD56xx core selection"
default CXD56_MAINCORE
config CXD56_MAINCORE
bool "Main Core"
config CXD56_SUBCORE
bool "Sub Core"
endchoice
config CXD56_CUSTOM_PINCONFIG
bool "Board-specific pin configuration"
default n
@ -60,10 +72,12 @@ config CXD56_SPH
config CXD56_PMIC
bool
default y
default y if CXD56_MAINCORE
default n if CXD56_SUBCORE
config CXD56_CPUFIFO
bool
default y
config CXD56_ICC
bool
@ -81,8 +95,8 @@ config CXD56_CPUFIFO_NBUFFERS
config CXD56_FARAPI
bool
default y
select CXD56_CPUFIFO
default y if CXD56_MAINCORE
default n if CXD56_SUBCORE
menu "Far API Configuration"
depends on CXD56_FARAPI
@ -192,12 +206,25 @@ menuconfig CXD56_PM
if CXD56_PM
config CPUFREQ_RELEASE_LOCK
bool "Dynamic clock control"
default n
---help---
CPU frequency lock allows the system clock to be changed dynamically.
Acquiring the higher frequency lock will improve the performance, but
will increase the power consumption. If this is enabled, the system
clock is the lower frequency unless the frequency lock is acquired.
If disabled, the system clock will not change and will remain at the
maximum system clock.
config CXD56_PM_PROCFS
bool "Power Management PROCFS support"
default n
---help---
Enable the power domain status or the clock frequency monitor.
endif # CXD56_PM
config CXD56_GAUGE
bool "CXD5247 battery gauge"
default n
@ -241,7 +268,6 @@ config CXD56_CHARGER_DEBUG
Enable battery charger driver debug messages.
endif
endif # CXD56_PM
comment "Peripheral Support"
@ -321,6 +347,15 @@ config CXD56_SPI
if CXD56_SPI
config CXD56_SPI_DRIVER
bool "SPI character driver"
default y
select SPI_DRIVER
---help---
Build in support for a character driver at /dev/spi[N] that may be
used to perform SPI bus transfers from applications. The intent of
this driver is to support SPI testing.
config CXD56_SPI0
bool "SPI0"
@ -482,6 +517,7 @@ endif
config CXD56_I2C
bool "I2C"
select I2C
if CXD56_I2C
@ -598,6 +634,27 @@ config CXD56_HPADC0_FREQ
RCOSC : 0 to 7 (0 ~ 6 : over-sampling mode)
XOSC : 0 to 7 (0 ~ 6 : over-sampling mode)
choice
prompt "Input Gain"
default CXD56_HPADC0_INPUT_GAIN_0DB
config CXD56_HPADC0_INPUT_GAIN_M6DB
bool "-6 dB"
config CXD56_HPADC0_INPUT_GAIN_0DB
bool "0 dB"
config CXD56_HPADC0_INPUT_GAIN_6DB
bool "+6 dB"
config CXD56_HPADC0_INPUT_GAIN_12DB
bool "+12 dB"
config CXD56_HPADC0_INPUT_GAIN_14DB
bool "+14 dB"
endchoice
config CXD56_HPADC0_OFFSET
int "Offset"
default 0
@ -615,6 +672,17 @@ config CXD56_HPADC0_FSIZE
---help---
SCU FIFO size
config CXD56_HPADC0_HIGHSPEED
bool "High speed support"
default n
depends on !CXD56_LPADC && !CXD56_HPADC1 && !CXD56_I2C0_SCUSEQ && !CXD56_I2C1_SCUSEQ && !CXD56_SPI3_SCUSEQ
---help---
Enable high-speed ADC. It supports a sampling rate of up to 512kHz
only for HPADC0. In other to use the 512kHz sampling rate, SCU clock
mode should be selected CXD56_SCU_XOSC, and Coefficient of sampling
frequency CXD56_HPADC0_FREQ should be set 2. When this is enabled,
other ADC channels and SCU sequencers cannot be used at the same time.
endif # CXD56_HPADC0
menuconfig CXD56_HPADC1
@ -642,6 +710,27 @@ config CXD56_HPADC1_FREQ
RCOSC : 0 to 7 (0 ~ 6 : over-sampling mode)
XOSC : 0 to 7 (0 ~ 6 : over-sampling mode)
choice
prompt "Input Gain"
default CXD56_HPADC1_INPUT_GAIN_0DB
config CXD56_HPADC1_INPUT_GAIN_M6DB
bool "-6 dB"
config CXD56_HPADC1_INPUT_GAIN_0DB
bool "0 dB"
config CXD56_HPADC1_INPUT_GAIN_6DB
bool "+6 dB"
config CXD56_HPADC1_INPUT_GAIN_12DB
bool "+12 dB"
config CXD56_HPADC1_INPUT_GAIN_14DB
bool "+14 dB"
endchoice
config CXD56_HPADC1_OFFSET
int "Offset"
default 0
@ -669,7 +758,7 @@ if CXD56_LPADC
choice
prompt "Select LPADC channel"
default CXD56_LPADC0
default CXD56_LPADC_ALL
config CXD56_LPADC0
bool "LPADC channel 0"
@ -713,7 +802,8 @@ menu "LPADC0"
config CXD56_LPADC0_FREQ
int "Coefficient of sampling frequency"
default 12
default 12 if CXD56_SCU_32K
default 7 if CXD56_SCU_RCOSC || CXD56_SCU_XOSC
range 11 15 if CXD56_SCU_32K && CXD56_LPADC0
range 3 15 if CXD56_SCU_RCOSC && CXD56_LPADC0
range 2 15 if CXD56_SCU_XOSC && CXD56_LPADC0
@ -767,7 +857,8 @@ menu "LPADC1"
config CXD56_LPADC1_FREQ
int "Coefficient of sampling frequency"
default 12
default 12 if CXD56_SCU_32K
default 7 if CXD56_SCU_RCOSC || CXD56_SCU_XOSC
range 11 15 if CXD56_SCU_32K && CXD56_LPADC1
range 3 15 if CXD56_SCU_RCOSC && CXD56_LPADC1
range 2 15 if CXD56_SCU_XOSC && CXD56_LPADC1
@ -821,7 +912,8 @@ menu "LPADC2"
config CXD56_LPADC2_FREQ
int "Coefficient of sampling frequency"
default 12
default 12 if CXD56_SCU_32K
default 7 if CXD56_SCU_RCOSC || CXD56_SCU_XOSC
range 11 15 if CXD56_SCU_32K && CXD56_LPADC2
range 3 15 if CXD56_SCU_RCOSC && CXD56_LPADC2
range 2 15 if CXD56_SCU_XOSC && CXD56_LPADC2
@ -867,7 +959,8 @@ menu "LPADC3"
config CXD56_LPADC3_FREQ
int "Coefficient of sampling frequency"
default 12
default 12 if CXD56_SCU_32K
default 7 if CXD56_SCU_RCOSC || CXD56_SCU_XOSC
range 11 15 if CXD56_SCU_32K && CXD56_LPADC3
range 3 15 if CXD56_SCU_RCOSC && CXD56_LPADC3
range 2 15 if CXD56_SCU_XOSC && CXD56_LPADC3
@ -1035,7 +1128,7 @@ menuconfig CXD56_SDIO
default n
select ARCH_HAVE_SDIO
select SDIO_BLOCKSETUP
select SCHED_HPWORK
depends on SCHED_HPWORK
if CXD56_SDIO
@ -1062,12 +1155,6 @@ config CXD56_SDIO_DISABLE_CD_WP
Disable the CD and WP pin for Embedded SDIO.If the CD pin is not disable,
the SDIO initialization will be failed.
config CXD56_SDIO_ENABLE_MULTIFUNCTION
bool "Enable SDIO multi-function"
default n
---help---
Support multi-function with SDIO interfaced peripheral other than SD Card.
endif # SDIO Configuration
menuconfig CXD56_SPISD
@ -1083,6 +1170,13 @@ config CXD56_SPISD_SLOT_NO
---help---
Select spi sd card slot number.
config CXD56_SPISD_SPI_CH
int "SPI channel number"
default 5
range 4 5
---help---
Select spi channel number to use spi sd card.
endif # SPISD Configuration
config CXD56_EMMC
@ -1141,6 +1235,22 @@ config CXD56_GNSS_FW_RTK
---help---
This is experimental function.
choice
prompt "GNSS 1PPS output"
default CXD56_GNSS_1PPS_PIN_HIF_IRQ_OUT
config CXD56_GNSS_1PPS_PIN_GNSS_1PPS_OUT
bool "Use PIN_GNSS_1PPS_OUT"
depends on CXD56_FCBGA
---help---
GNSS 1PPS output from PIN_GNSS_1PPS_OUT pin.
config CXD56_GNSS_1PPS_PIN_HIF_IRQ_OUT
bool "Use PIN_HIF_IRQ_OUT"
---help---
GNSS 1PPS output from PIN_HIF_IRQ_OUT pin.
endchoice
config CXD56_GNSS_DEBUG_FEATURE
bool "GNSS debug feature"

View file

@ -45,7 +45,7 @@ endif
endif
CMN_CSRCS = arm_assert.c arm_blocktask.c arm_copyfullstate.c
CMN_CSRCS += arm_createstack.c arm_mdelay.c arm_udelay.c arm_exit.c
CMN_CSRCS += arm_createstack.c arm_exit.c
CMN_CSRCS += arm_initialize.c arm_initialstate.c arm_interruptcontext.c
CMN_CSRCS += arm_memfault.c arm_modifyreg8.c arm_modifyreg16.c arm_modifyreg32.c
CMN_CSRCS += arm_releasepending.c arm_releasestack.c arm_reprioritizertr.c

View file

@ -50,20 +50,4 @@
#include "hardware/cxd5602_memorymap.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
/****************************************************************************
* Public Data
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
#endif /* __ARCH_ARM_SRC_CXD56XX_CHIP_H */

View file

@ -124,6 +124,40 @@
#define ADC_BYTESPERSAMPLE 2
#define ADC_ELEMENTSIZE 0
/* Input Gain setting */
#define INPUT_GAIN(a, g1, g2) (((a) << 24) | ((g2) << 16) | ((g1) << 12))
#define INPUT_GAIN_MASK INPUT_GAIN(3, 15, 15)
#define INPUT_GAIN_MINUS_6DB INPUT_GAIN(2, 0, 0)
#define INPUT_GAIN_THROUGH INPUT_GAIN(0, 0, 0)
#define INPUT_GAIN_PLUS_6DB INPUT_GAIN(0, 4, 0)
#define INPUT_GAIN_PLUS_12DB INPUT_GAIN(0, 12, 0)
#define INPUT_GAIN_PLUS_14DB INPUT_GAIN(0, 4, 8)
#if defined(CONFIG_CXD56_HPADC0_INPUT_GAIN_M6DB)
#define HPADC0_INPUT_GAIN INPUT_GAIN_MINUS_6DB
#elif defined(CONFIG_CXD56_HPADC0_INPUT_GAIN_6DB)
#define HPADC0_INPUT_GAIN INPUT_GAIN_PLUS_6DB
#elif defined(CONFIG_CXD56_HPADC0_INPUT_GAIN_12DB)
#define HPADC0_INPUT_GAIN INPUT_GAIN_PLUS_12DB
#elif defined(CONFIG_CXD56_HPADC0_INPUT_GAIN_14DB)
#define HPADC0_INPUT_GAIN INPUT_GAIN_PLUS_14DB
#else
#define HPADC0_INPUT_GAIN INPUT_GAIN_THROUGH
#endif
#if defined(CONFIG_CXD56_HPADC1_INPUT_GAIN_M6DB)
#define HPADC1_INPUT_GAIN INPUT_GAIN_MINUS_6DB
#elif defined(CONFIG_CXD56_HPADC1_INPUT_GAIN_6DB)
#define HPADC1_INPUT_GAIN INPUT_GAIN_PLUS_6DB
#elif defined(CONFIG_CXD56_HPADC1_INPUT_GAIN_12DB)
#define HPADC1_INPUT_GAIN INPUT_GAIN_PLUS_12DB
#elif defined(CONFIG_CXD56_HPADC1_INPUT_GAIN_14DB)
#define HPADC1_INPUT_GAIN INPUT_GAIN_PLUS_14DB
#else
#define HPADC1_INPUT_GAIN INPUT_GAIN_THROUGH
#endif
typedef enum adc_ch
{
CH0 = 0, /* LPADC0 */
@ -523,6 +557,15 @@ static int adc_start(adc_ch_t ch, uint8_t freq, FAR struct seq_s *seq,
(uint32_t *)SCUADCIF_HPADC1_A2;
putreg32(1, addr);
/* HPADC.A3 */
addr = (ch == CH4) ? (uint32_t *)SCUADCIF_HPADC0_A3 :
(uint32_t *)SCUADCIF_HPADC1_A3;
val = getreg32(addr) & ~INPUT_GAIN_MASK;
val |= (ch == CH4) ? HPADC0_INPUT_GAIN : HPADC1_INPUT_GAIN;
putreg32(val, addr);
/* HPADC.D0 */
addr = (ch == CH4) ? (uint32_t *)SCUADCIF_HPADC0_D0 :

View file

@ -83,7 +83,9 @@ const uint32_t g_idle_topstack = (uint32_t)&_ebss +
# error Invalid memory configuration
#endif
#define MM_RAM_END CONFIG_RAM_END
/* __stack is the end of RAM address, it would be set by linker. */
extern char __stack[];
/****************************************************************************
* Private Functions
@ -131,7 +133,7 @@ void up_allocate_heap(FAR void **heap_start, size_t *heap_size)
board_autoled_on(LED_HEAPALLOCATE);
*heap_start = (FAR void *)g_idle_topstack;
*heap_size = MM_RAM_END - g_idle_topstack;
*heap_size = (uint32_t)&__stack - g_idle_topstack;
/* Colorize the heap for debug */

View file

@ -69,11 +69,9 @@
/* Debug ********************************************************************/
#ifdef CONFIG_CXD56_CHARGER_DEBUG
#define baterr(fmt, ...) logerr(fmt, ## __VA_ARGS__)
#define batdbg(fmt, ...) logdebug(fmt, ## __VA_ARGS__)
#define baterr(fmt, ...) _err(fmt, ## __VA_ARGS__)
#else
#define baterr(fmt, ...)
#define batdbg(fmt, ...)
#endif
/* Configuration */
@ -81,7 +79,7 @@
#undef USE_FLOAT_CONVERSION
#ifdef CONFIG_CXD56_CHARGER_TEMP_PRECISE
#if !defined(CONFIG_LIBM) && !defined(CONFIG_LIBM_NEWLIB)
#if !defined(CONFIG_LIBM) && !defined(CONFIG_ARCH_MATH_H)
# error Temperature conversion in float requires math library.
#endif
#define USE_FLOAT_CONVERSION 1
@ -370,7 +368,9 @@ static int charger_get_current(FAR int *current)
return -EIO;
}
/* (Register value - 800h) / Current detection resistor (0.1 ohm) * 0.02929 */
/* (Register value - 800h) / Current detection resistor (0.1 ohm)
* x 0.02929
*/
#ifdef USE_FLOAT_CONVERSION
*current = (gauge.current - 0x800) / 0.1f * 0.02929f;
@ -508,7 +508,7 @@ static int charger_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
FAR struct charger_dev_s *priv = inode->i_private;
int ret = -ENOTTY;
nxsem_wait(&priv->batsem);
nxsem_wait_uninterruptible(&priv->batsem);
switch (cmd)
{

View file

@ -140,14 +140,13 @@ struct power_domain
static void cxd56_img_clock_enable(void);
static void cxd56_img_clock_disable(void);
static void cxd56_scu_clock_ctrl(\
uint32_t block, uint32_t intr, int on);
static void cxd56_scu_peri_clock_enable(\
FAR const struct scu_peripheral *p) __unused;
static void cxd56_scu_peri_clock_disable(\
FAR const struct scu_peripheral *p) __unused;
static void cxd56_scu_peri_clock_gating(\
FAR const struct scu_peripheral *p, int enable) __unused;
static void cxd56_scu_clock_ctrl(uint32_t block, uint32_t intr, int on);
static void cxd56_scu_peri_clock_enable(FAR const struct scu_peripheral *p)
__unused;
static void cxd56_scu_peri_clock_disable(FAR const struct scu_peripheral *p)
__unused;
static void cxd56_scu_peri_clock_gating(FAR const struct scu_peripheral *p,
int enable) __unused;
/****************************************************************************
* Public Data
@ -238,7 +237,7 @@ static void clock_semtake(sem_t *id)
{
if (!up_interrupt_context())
{
nxsem_wait(id);
nxsem_wait_uninterruptible(id);
}
}
@ -2033,7 +2032,7 @@ static void cxd56_scu_peri_clock_disable(FAR const struct scu_peripheral *p)
disable_pwd(PDID_SCU);
}
static void cxd56_scu_peri_clock_gating(\
static void cxd56_scu_peri_clock_gating(
FAR const struct scu_peripheral *p, int enable)
{
uint32_t cken = 1u << p->cken;

View file

@ -83,7 +83,10 @@ struct cxd56cpu1_info_s
* Private Data
****************************************************************************/
static struct cxd56cpu1_info_s g_cpu1_info = {0};
static struct cxd56cpu1_info_s g_cpu1_info =
{
0
};
/****************************************************************************
* Private Functions
@ -105,6 +108,7 @@ static FAR void *cxd56cpu1_worker(FAR void *arg)
{
continue;
}
sigtype = (uint8_t)CXD56_CPU1_GET_DEV(msg.data);
if (sigtype >= CXD56_CPU1_DATA_TYPE_MAX)
{
@ -180,7 +184,7 @@ int cxd56_cpu1siginit(uint8_t sigtype, FAR void *data)
if (priv->sigtype[sigtype].use)
{
ret = -EBUSY;
goto _err1;
goto err1;
}
priv->sigtype[sigtype].use = true;
@ -189,7 +193,7 @@ int cxd56_cpu1siginit(uint8_t sigtype, FAR void *data)
if (priv->ndev > 0)
{
ret = OK;
goto _err1;
goto err1;
}
priv->ndev++;
@ -202,7 +206,7 @@ int cxd56_cpu1siginit(uint8_t sigtype, FAR void *data)
if (ret < 0)
{
_err("Failed to initialize ICC for GPS CPU: %d\n", ret);
goto _err0;
goto err0;
}
pthread_attr_init(&tattr);
@ -216,18 +220,19 @@ int cxd56_cpu1siginit(uint8_t sigtype, FAR void *data)
{
cxd56_iccuninitmsg(CXD56CPU1_CPUID);
ret = -ret; /* pthread_create does not modify errno. */
goto _err0;
goto err0;
}
priv->workertid = tid;
return ret;
_err0:
err0:
priv->sigtype[sigtype].use = false;
priv->sigtype[sigtype].data = NULL;
return ret;
_err1:
err1:
sched_unlock();
return ret;
}
@ -248,7 +253,8 @@ int cxd56_cpu1siguninit(uint8_t sigtype)
if (!priv->sigtype[sigtype].use)
{
ret = -EBUSY;
goto _err1;
sched_unlock();
return ret;
}
priv->ndev--;
@ -258,7 +264,7 @@ int cxd56_cpu1siguninit(uint8_t sigtype)
if (priv->ndev > 0)
{
ret = OK;
goto _err0;
return ret;
}
tid = priv->workertid;
@ -272,10 +278,4 @@ int cxd56_cpu1siguninit(uint8_t sigtype)
cxd56_iccuninit(CXD56CPU1_CPUID);
return 0;
_err1:
sched_unlock();
_err0:
return ret;
}

View file

@ -54,7 +54,8 @@
#define CXD56_CPU1_DATA_TYPE_CPUFIFOAPI 13
#define CXD56_CPU1_DATA_TYPE_SBAS 14
#define CXD56_CPU1_DATA_TYPE_DCREPORT 15
#define CXD56_CPU1_DATA_TYPE_MAX 16
#define CXD56_CPU1_DATA_TYPE_SARRLM 16
#define CXD56_CPU1_DATA_TYPE_MAX 17
/* CPU1 devices */

View file

@ -775,7 +775,7 @@ DMA_HANDLE cxd56_dmachannel(int ch, ssize_t maxsize)
/* Get exclusive access to allocate channel */
nxsem_wait(&g_dmaexc);
nxsem_wait_uninterruptible(&g_dmaexc);
if (ch < 0 || ch >= NCHANNELS)
{
@ -858,7 +858,7 @@ void cxd56_dmafree(DMA_HANDLE handle)
return;
}
nxsem_wait(&g_dmaexc);
nxsem_wait_uninterruptible(&g_dmaexc);
if (!dmach->inuse)
{

View file

@ -962,6 +962,7 @@ int cxd56_emmcinitialize(void)
memset(priv, 0, sizeof(struct cxd56_emmc_state_s));
nxsem_init(&priv->excsem, 0, 1);
nxsem_init(&g_waitsem, 0, 0);
nxsem_set_protocol(&g_waitsem, SEM_PRIO_NONE);
ret = emmc_hwinitialize();
if (ret != OK)

View file

@ -55,7 +55,7 @@
#include "cxd56_farapistub.h"
#include "hardware/cxd5602_backupmem.h"
int PM_WakeUpCpu(int cpuid);
int fw_pm_wakeupcpu(int cpuid);
/****************************************************************************
* Pre-processor Definitions
@ -120,7 +120,7 @@ struct farmsg_s
* Public Data
****************************************************************************/
extern char Image$$MODLIST$$Base[];
extern char _image_modlist_base[];
/****************************************************************************
* Private Data
@ -210,7 +210,7 @@ void farapi_main(int id, void *arg, struct modulelist_s *mlist)
if (((gnscken & GNSDSP_CKEN_P1) != GNSDSP_CKEN_P1) &&
((gnscken & GNSDSP_CKEN_COP) != GNSDSP_CKEN_COP))
{
PM_WakeUpCpu(GPS_CPU_ID);
fw_pm_wakeupcpu(GPS_CPU_ID);
}
}
#endif
@ -220,7 +220,7 @@ void farapi_main(int id, void *arg, struct modulelist_s *mlist)
api = &msg.u.api;
msg.cpuid = getreg32(CPU_ID);
msg.modid = mlist - (struct modulelist_s *)&Image$$MODLIST$$Base;
msg.modid = mlist - (struct modulelist_s *)&_image_modlist_base;
api->id = id;
api->arg = arg;
@ -274,6 +274,7 @@ void cxd56_farapiinitialize(void)
#endif
nxsem_init(&g_farlock, 0, 1);
nxsem_init(&g_farwait, 0, 0);
nxsem_set_protocol(&g_farwait, SEM_PRIO_NONE);
cxd56_iccinit(CXD56_PROTO_MBX);
cxd56_iccinit(CXD56_PROTO_FLG);

File diff suppressed because it is too large Load diff

View file

@ -36,6 +36,6 @@
#ifndef __ARCH_ARM_SRC_CXD56XX_CXD56_FARAPISTUB_H
#define __ARCH_ARM_SRC_CXD56XX_CXD56_FARAPISTUB_H
#define FARAPISTUB_VERSION 17660
#define FARAPISTUB_VERSION 20129
#endif /* __ARCH_ARM_SRC_CXD56XX_CXD56_FARAPISTUB_H */

View file

@ -335,7 +335,7 @@ static int gauge_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
FAR struct bat_gauge_dev_s *priv = inode->i_private;
int ret = -ENOTTY;
nxsem_wait(&priv->batsem);
nxsem_wait_uninterruptible(&priv->batsem);
switch (cmd)
{

View file

@ -169,7 +169,7 @@ FAR static int (*g_cmdlist[CXD56_GEOFENCE_IOCTL_MAX])(unsigned long) =
static int cxd56_geofence_start(unsigned long arg)
{
return GD_RegisterGeofence();
return fw_gd_registergeofence();
}
/****************************************************************************
@ -189,7 +189,7 @@ static int cxd56_geofence_start(unsigned long arg)
static int cxd56_geofence_stop(unsigned long arg)
{
return GD_ReleaseGeofence();
return fw_gd_releasegeofence();
}
/****************************************************************************
@ -219,7 +219,7 @@ static int cxd56_geofence_add_region(unsigned long arg)
reg_data = (FAR struct cxd56_geofence_region_s *)arg;
ret = GD_GeoAddRegion(reg_data->id,
ret = fw_gd_geoaddregion(reg_data->id,
reg_data->latitude,
reg_data->longitude,
reg_data->radius);
@ -254,7 +254,7 @@ static int cxd56_geofence_modify_region(unsigned long arg)
reg_data = (FAR struct cxd56_geofence_region_s *)arg;
ret = GD_GeoModifyRegion(reg_data->id, reg_data->latitude,
ret = fw_gd_geomodifyregion(reg_data->id, reg_data->latitude,
reg_data->longitude, reg_data->radius);
return ret;
@ -286,7 +286,7 @@ static int cxd56_geofence_delete_region(unsigned long arg)
}
id = (uint8_t)arg;
ret = GD_GeoDeleteRegione(id);
ret = fw_gd_geodeleteregione(id);
return ret;
}
@ -310,7 +310,7 @@ static int cxd56_geofence_delete_all_region(unsigned long arg)
{
int ret;
ret = GD_GeoDeleteAllRegion();
ret = fw_gd_geodeleteallregion();
return ret;
}
@ -342,7 +342,7 @@ static int cxd56_geofence_get_region_data(unsigned long arg)
reg_data = (FAR struct cxd56_geofence_region_s *)arg;
ret = GD_GeoGetRegionData(reg_data->id, &reg_data->latitude,
ret = fw_gd_geogetregiondata(reg_data->id, &reg_data->latitude,
&reg_data->longitude, &reg_data->radius);
return ret;
@ -370,7 +370,7 @@ static int cxd56_geofence_get_used_id(unsigned long arg)
return -EINVAL;
}
*(uint32_t *)arg = GD_GeoGetUsedRegionId();
*(uint32_t *)arg = fw_gd_geogetusedregionid();
return 0;
}
@ -394,7 +394,7 @@ static int cxd56_geofence_get_all_status(unsigned long arg)
{
int ret;
ret = GD_GeoSetAllRgionNotifyRequest();
ret = fw_gd_geosetallrgionnotifyrequest();
return ret;
}
@ -426,7 +426,7 @@ static int cxd56_geofence_set_mode(unsigned long arg)
mode = (FAR struct cxd56_geofence_mode_s *)arg;
ret = GD_GeoSetOpMode(mode->deadzone, mode->dwell_detecttime);
ret = fw_gd_geosetopmode(mode->deadzone, mode->dwell_detecttime);
return ret;
}
@ -571,9 +571,9 @@ static ssize_t cxd56_geofence_read(FAR struct file *filep, FAR char *buffer,
goto _err;
}
/* GD_ReadBuffer returns copied data size or negative error code */
/* fw_gd_readbuffer returns copied data size or negative error code */
ret = GD_ReadBuffer(CXD56_CPU1_DEV_GEOFENCE, 0, buffer, len);
ret = fw_gd_readbuffer(CXD56_CPU1_DEV_GEOFENCE, 0, buffer, len);
_err:
return ret;
@ -659,7 +659,7 @@ static int cxd56_geofence_poll(FAR struct file *filep,
priv->fds[i] = fds;
fds->priv = &priv->fds[i];
GD_SetNotifyMask(CXD56_CPU1_DEV_GEOFENCE, FALSE);
fw_gd_setnotifymask(CXD56_CPU1_DEV_GEOFENCE, FALSE);
break;
}
}

View file

@ -54,11 +54,13 @@
#include <nuttx/spi/spi.h>
#include <arch/chip/gnss.h>
#include <arch/chip/pm.h>
#include <arch/board/board.h>
#include "cxd56_gnss_api.h"
#include "cxd56_cpu1signal.h"
#include "cxd56_gnss.h"
#include "cxd56_pinconfig.h"
#if defined(CONFIG_CXD56_GNSS)
@ -66,9 +68,9 @@
* External Defined Functions
****************************************************************************/
extern int PM_LoadImage(int cpuid, const char *filename);
extern int PM_StartCpu(int cpuid, int wait);
extern int PM_SleepCpu(int cpuid, int mode);
extern int fw_pm_loadimage(int cpuid, const char *filename);
extern int fw_pm_startcpu(int cpuid, int wait);
extern int fw_pm_sleepcpu(int cpuid, int mode);
/****************************************************************************
* Pre-processor Definitions
@ -289,6 +291,14 @@ static int cxd56_gnss_get_var_ephemeris(FAR struct file *filep,
unsigned long arg);
static int cxd56_gnss_set_var_ephemeris(FAR struct file *filep,
unsigned long arg);
static int cxd56_gnss_set_usecase(FAR struct file *filep,
unsigned long arg);
static int cxd56_gnss_get_usecase(FAR struct file *filep,
unsigned long arg);
static int cxd56_gnss_set_1pps_output(FAR struct file *filep,
unsigned long arg);
static int cxd56_gnss_get_1pps_output(FAR struct file *filep,
unsigned long arg);
/* file operation functions */
@ -384,10 +394,18 @@ static int (*g_cmdlist[CXD56_GNSS_IOCTL_MAX])(FAR struct file *filep,
cxd56_gnss_start_navmsg_output,
cxd56_gnss_set_var_ephemeris,
cxd56_gnss_get_var_ephemeris,
cxd56_gnss_set_usecase,
cxd56_gnss_get_usecase,
cxd56_gnss_set_1pps_output,
cxd56_gnss_get_1pps_output,
/* max CXD56_GNSS_IOCTL_MAX */
/* max CXD56_GNSS_IOCTL_MAX */
};
static struct pm_cpu_freqlock_s g_lv_lock =
PM_CPUFREQLOCK_INIT(PM_CPUFREQLOCK_TAG('G', 'T', 0),
PM_CPUFREQLOCK_FLAG_LV);
/****************************************************************************
* Private Functions
****************************************************************************/
@ -488,7 +506,7 @@ static int cxd56_gnss_select_satellite_system(FAR struct file *filep,
{
uint32_t system = (uint32_t)arg;
return GD_SelectSatelliteSystem(system);
return fw_gd_selectsatellitesystem(system);
}
/****************************************************************************
@ -520,7 +538,7 @@ static int cxd56_gnss_get_satellite_system(FAR struct file *filep,
return -EINVAL;
}
ret = GD_GetSatelliteSystem(&system);
ret = fw_gd_getsatellitesystem(&system);
*(uint32_t *)arg = system;
return ret;
@ -556,7 +574,7 @@ cxd56_gnss_set_receiver_position_ellipsoidal(FAR struct file *filep,
pos = (FAR struct cxd56_gnss_ellipsoidal_position_s *)arg;
return GD_SetReceiverPositionEllipsoidal(&pos->latitude,
return fw_gd_setreceiverpositionellipsoidal(&pos->latitude,
&pos->longitude,
&pos->altitude);
}
@ -590,7 +608,7 @@ static int cxd56_gnss_set_receiver_position_orthogonal(
}
pos = (FAR struct cxd56_gnss_orthogonal_position_s *)arg;
return GD_SetReceiverPositionOrthogonal(pos->x, pos->y, pos->z);
return fw_gd_setreceiverpositionorthogonal(pos->x, pos->y, pos->z);
}
/****************************************************************************
@ -619,7 +637,7 @@ static int cxd56_gnss_set_ope_mode(FAR struct file *filep, unsigned long arg)
ope_mode = (FAR struct cxd56_gnss_ope_mode_param_s *)arg;
return GD_SetOperationMode(ope_mode->mode, ope_mode->cycle);
return fw_gd_setoperationmode(ope_mode->mode, ope_mode->cycle);
}
/****************************************************************************
@ -648,7 +666,7 @@ static int cxd56_gnss_get_ope_mode(FAR struct file *filep, unsigned long arg)
ope_mode = (FAR struct cxd56_gnss_ope_mode_param_s *)arg;
return GD_GetOperationMode(&ope_mode->mode, &ope_mode->cycle);
return fw_gd_getoperationmode(&ope_mode->mode, &ope_mode->cycle);
}
/****************************************************************************
@ -672,7 +690,7 @@ static int cxd56_gnss_set_tcxo_offset(FAR struct file *filep,
{
int32_t offset = (int32_t)arg;
return GD_SetTcxoOffset(offset);
return fw_gd_settcxooffset(offset);
}
/****************************************************************************
@ -702,7 +720,7 @@ static int cxd56_gnss_get_tcxo_offset(FAR struct file *filep,
return -EINVAL;
}
ret = GD_GetTcxoOffset(&offset);
ret = fw_gd_gettcxooffset(&offset);
*(uint32_t *)arg = offset;
return ret;
@ -728,6 +746,7 @@ static int cxd56_gnss_get_tcxo_offset(FAR struct file *filep,
static int cxd56_gnss_set_time(FAR struct file *filep, unsigned long arg)
{
FAR struct cxd56_gnss_datetime_s *date_time;
int ret;
if (!arg)
{
@ -736,7 +755,11 @@ static int cxd56_gnss_set_time(FAR struct file *filep, unsigned long arg)
date_time = (FAR struct cxd56_gnss_datetime_s *)arg;
return GD_SetTime(&date_time->date, &date_time->time);
up_pm_acquire_freqlock(&g_lv_lock);
ret = fw_gd_settime(&date_time->date, &date_time->time);
up_pm_release_freqlock(&g_lv_lock);
return ret;
}
/****************************************************************************
@ -767,7 +790,7 @@ static int cxd56_gnss_get_almanac(FAR struct file *filep, unsigned long arg)
param = (FAR struct cxd56_gnss_orbital_param_s *)arg;
return GD_GetAlmanac(param->type, param->data, &almanac_size);
return fw_gd_getalmanac(param->type, param->data, &almanac_size);
}
/****************************************************************************
@ -797,7 +820,7 @@ static int cxd56_gnss_set_almanac(FAR struct file *filep, unsigned long arg)
param = (FAR struct cxd56_gnss_orbital_param_s *)arg;
return GD_SetAlmanac(param->type, param->data);
return fw_gd_setalmanac(param->type, param->data);
}
/****************************************************************************
@ -829,7 +852,7 @@ static int cxd56_gnss_get_ephemeris(FAR struct file *filep,
param = (FAR struct cxd56_gnss_orbital_param_s *)arg;
return GD_GetEphemeris(param->type, param->data, &ephemeris_size);
return fw_gd_getephemeris(param->type, param->data, &ephemeris_size);
}
/****************************************************************************
@ -860,7 +883,7 @@ static int cxd56_gnss_set_ephemeris(FAR struct file *filep,
param = (FAR struct cxd56_gnss_orbital_param_s *)arg;
return GD_SetEphemeris(param->type, param->data);
return fw_gd_setephemeris(param->type, param->data);
}
/****************************************************************************
@ -902,7 +925,7 @@ static int cxd56_gnss_save_backup_data(FAR struct file *filep,
do
{
n = GD_ReadBuffer(CXD56_CPU1_DATA_TYPE_BACKUP, offset, buf,
n = fw_gd_readbuffer(CXD56_CPU1_DATA_TYPE_BACKUP, offset, buf,
CONFIG_CXD56_GNSS_BACKUP_BUFFER_SIZE);
if (n <= 0)
{
@ -1005,7 +1028,7 @@ static int cxd56_gnss_close_cep_data(FAR struct file *filep,
static int cxd56_gnss_check_cep_data(FAR struct file *filep,
unsigned long arg)
{
return GD_CepCheckAssistData();
return fw_gd_cepcheckassistdata();
}
/****************************************************************************
@ -1035,7 +1058,7 @@ static int cxd56_gnss_get_cep_age(FAR struct file *filep, unsigned long arg)
age = (FAR struct cxd56_gnss_cep_age_s *)arg;
return GD_CepGetAgeData(&age->age, &age->cepi);
return fw_gd_cepgetagedata(&age->age, &age->cepi);
}
/****************************************************************************
@ -1089,7 +1112,7 @@ static int cxd56_gnss_set_acquist_data(FAR struct file *filep,
acquist = (FAR struct cxd56_gnss_agps_acquist_s *)arg;
return GD_SetAcquist(acquist->data, acquist->size);
return fw_gd_setacquist(acquist->data, acquist->size);
}
/****************************************************************************
@ -1120,7 +1143,7 @@ static int cxd56_gnss_set_frametime(FAR struct file *filep,
frametime = (FAR struct cxd56_gnss_agps_frametime_s *)arg;
return GD_SetFrameTime(frametime->sec, frametime->frac);
return fw_gd_setframetime(frametime->sec, frametime->frac);
}
/****************************************************************************
@ -1150,7 +1173,7 @@ static int cxd56_gnss_set_tau_gps(FAR struct file *filep, unsigned long arg)
taugpstime = (FAR struct cxd56_gnss_agps_tau_gps_s *)arg;
return GD_SetTauGps(&taugpstime->taugps);
return fw_gd_settaugps(&taugpstime->taugps);
}
/****************************************************************************
@ -1180,7 +1203,7 @@ static int cxd56_gnss_set_time_gps(FAR struct file *filep, unsigned long arg)
time_gps = (FAR struct cxd56_gnss_agps_time_gps_s *)arg;
return GD_SetTimeGps(&time_gps->date, &time_gps->time);
return fw_gd_settimegps(&time_gps->date, &time_gps->time);
}
/****************************************************************************
@ -1204,7 +1227,7 @@ static int cxd56_gnss_clear_receiver_info(FAR struct file *filep,
{
uint32_t clear_type = arg;
return GD_ClearReceiverInfo(clear_type);
return fw_gd_clearreceiverinfo(clear_type);
}
/****************************************************************************
@ -1235,7 +1258,7 @@ static int cxd56_gnss_set_tow_assist(FAR struct file *filep,
assist = (FAR struct cxd56_gnss_agps_tow_assist_s *)arg;
return GD_SetTowAssist(assist->data, assist->size);
return fw_gd_settowassist(assist->data, assist->size);
}
/****************************************************************************
@ -1266,7 +1289,7 @@ static int cxd56_gnss_set_utc_model(FAR struct file *filep,
model = (FAR struct cxd56_gnss_agps_utc_model_s *)arg;
return GD_SetUtcModel(model->data, model->size);
return fw_gd_setutcmodel(model->data, model->size);
}
/****************************************************************************
@ -1297,8 +1320,9 @@ static int cxd56_gnss_control_spectrum(FAR struct file *filep,
control = (FAR struct cxd56_gnss_spectrum_control_s *)arg;
return GD_SpectrumControl(control->time, control->enable, control->point1,
control->step1, control->point2, control->step2);
return fw_gd_spectrumcontrol(control->time, control->enable,
control->point1, control->step1,
control->point2, control->step2);
}
/****************************************************************************
@ -1349,12 +1373,12 @@ static int cxd56_gnss_start_test(FAR struct file *filep, unsigned long arg)
/* set parameter */
info = (FAR struct cxd56_gnss_test_info_s *)arg;
GD_StartGpsTest(info->satellite, info->reserve1,
fw_gd_startgpstest(info->satellite, info->reserve1,
info->reserve2, info->reserve3);
/* start test */
ret = GD_Start(CXD56_GNSS_STMOD_COLD);
ret = fw_gd_start(CXD56_GNSS_STMOD_COLD);
}
return ret;
@ -1382,12 +1406,12 @@ static int cxd56_gnss_stop_test(FAR struct file *filep, unsigned long arg)
/* term test */
ret = GD_StopGpsTest();
ret = fw_gd_stopgpstest();
if (ret == OK)
{
/* stop test */
ret = GD_Stop();
ret = fw_gd_stop();
}
/* Power off the LNA device */
@ -1425,7 +1449,7 @@ static int cxd56_gnss_get_test_result(FAR struct file *filep,
result = (FAR struct cxd56_gnss_test_result_s *)arg;
return GD_GetGpsTestResult(&result->cn, &result->doppler);
return fw_gd_getgpstestresult(&result->cn, &result->doppler);
}
/****************************************************************************
@ -1510,7 +1534,7 @@ static int cxd56_gnss_set_signal(FAR struct file *filep, unsigned long arg)
goto _err;
}
GD_SetNotifyMask(setting->gnsssig, FALSE);
fw_gd_setnotifymask(setting->gnsssig, FALSE);
sig->enable = 1;
sig->pid = pid;
@ -1557,7 +1581,7 @@ static int cxd56_gnss_start_pvtlog(FAR struct file *filep, unsigned long arg)
setting = (FAR struct cxd56_pvtlog_setting_s *)arg;
return GD_RegisterPvtlog(setting->cycle, setting->threshold);
return fw_gd_registerpvtlog(setting->cycle, setting->threshold);
}
/****************************************************************************
@ -1578,7 +1602,7 @@ static int cxd56_gnss_start_pvtlog(FAR struct file *filep, unsigned long arg)
static int cxd56_gnss_stop_pvtlog(FAR struct file *filep, unsigned long arg)
{
return GD_ReleasePvtlog();
return fw_gd_releasepvtlog();
}
/****************************************************************************
@ -1600,7 +1624,7 @@ static int cxd56_gnss_stop_pvtlog(FAR struct file *filep, unsigned long arg)
static int cxd56_gnss_delete_pvtlog(FAR struct file *filep,
unsigned long arg)
{
return GD_PvtlogDeleteLog();
return fw_gd_pvtlogdeletelog();
}
/****************************************************************************
@ -1631,7 +1655,7 @@ static int cxd56_gnss_get_pvtlog_status(FAR struct file *filep,
status = (FAR struct cxd56_pvtlog_status_s *)arg;
return GD_PvtlogGetLogStatus(&status->status);
return fw_gd_pvtloggetlogstatus(&status->status);
}
/****************************************************************************
@ -1663,7 +1687,7 @@ static int cxd56_gnss_start_rtk_output(FAR struct file *filep,
setting = (FAR struct cxd56_rtk_setting_s *)arg;
setting->sbasout = 0;
return GD_RtkStart(setting);
return fw_gd_rtkstart(setting);
}
/****************************************************************************
@ -1685,7 +1709,7 @@ static int cxd56_gnss_start_rtk_output(FAR struct file *filep,
static int cxd56_gnss_stop_rtk_output(FAR struct file *filep,
unsigned long arg)
{
return GD_RtkStop();
return fw_gd_rtkstop();
}
/****************************************************************************
@ -1709,7 +1733,7 @@ static int cxd56_gnss_set_rtk_interval(FAR struct file *filep,
{
int interval = (int)arg;
return GD_RtkSetOutputInterval(interval);
return fw_gd_rtksetoutputinterval(interval);
}
/****************************************************************************
@ -1739,7 +1763,7 @@ static int cxd56_gnss_get_rtk_interval(FAR struct file *filep,
return -EINVAL;
}
ret = GD_RtkGetOutputInterval(&interval);
ret = fw_gd_rtkgetoutputinterval(&interval);
*(uint32_t *)arg = interval;
return ret;
@ -1766,7 +1790,7 @@ static int cxd56_gnss_select_rtk_satellite(FAR struct file *filep,
{
uint32_t gnss = (uint32_t)arg;
return GD_RtkSetGnss(gnss);
return fw_gd_rtksetgnss(gnss);
}
/****************************************************************************
@ -1796,7 +1820,7 @@ static int cxd56_gnss_get_rtk_satellite(FAR struct file *filep,
return -EINVAL;
}
ret = GD_RtkGetGnss(&gnss);
ret = fw_gd_rtkgetgnss(&gnss);
*(uint32_t *)arg = gnss;
return ret;
@ -1823,7 +1847,7 @@ static int cxd56_gnss_set_rtk_ephemeris_enable(FAR struct file *filep,
{
int enable = (int)arg;
return GD_RtkSetEphNotify(enable);
return fw_gd_rtksetephnotify(enable);
}
/****************************************************************************
@ -1853,7 +1877,7 @@ static int cxd56_gnss_get_rtk_ephemeris_enable(FAR struct file *filep,
return -EINVAL;
}
ret = GD_RtkGetEphNotify(&enable);
ret = fw_gd_rtkgetephnotify(&enable);
*(uint32_t *)arg = enable;
return ret;
@ -1887,7 +1911,7 @@ static int cxd56_gnss_start_navmsg_output(FAR struct file *filep,
setting = (FAR struct cxd56_rtk_setting_s *)arg;
return GD_RtkStart(setting);
return fw_gd_rtkstart(setting);
}
/****************************************************************************
@ -1918,7 +1942,7 @@ static int cxd56_gnss_set_var_ephemeris(FAR struct file *filep,
param = (FAR struct cxd56_gnss_set_var_ephemeris_s *)arg;
return GD_SetVarEphemeris(param->data, param->size);
return fw_gd_setvarephemeris(param->data, param->size);
}
/****************************************************************************
@ -1949,7 +1973,134 @@ static int cxd56_gnss_get_var_ephemeris(FAR struct file *filep,
param = (FAR struct cxd56_gnss_get_var_ephemeris_s *)arg;
return GD_GetVarEphemeris(param->type, param->data, param->size);
return fw_gd_getvarephemeris(param->type, param->data, param->size);
}
/****************************************************************************
* Name: cxd56_gnss_set_usecase
*
* Description:
* Set usecase mode
*
* Input Parameters:
* filep - File structure pointer
* arg - Data for command
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
static int cxd56_gnss_set_usecase(FAR struct file *filep,
unsigned long arg)
{
return fw_gd_setusecase(arg);
}
/****************************************************************************
* Name: cxd56_gnss_get_usecase
*
* Description:
* Get usecase mode
*
* Input Parameters:
* filep - File structure pointer
* arg - Data for command
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
static int cxd56_gnss_get_usecase(FAR struct file *filep,
unsigned long arg)
{
int ret;
uint32_t usecase = 0;
if (!arg)
{
return -EINVAL;
}
ret = fw_gd_getusecase(&usecase);
*(uint32_t *)arg = usecase;
return ret;
}
/****************************************************************************
* Name: cxd56_gnss_set_1pps_output
*
* Description:
* Set enable or disable of 1PPS output
*
* Input Parameters:
* filep - File structure pointer
* arg - Data for command
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
static int cxd56_gnss_set_1pps_output(FAR struct file *filep,
unsigned long arg)
{
if (arg)
{
/* Enable 1PPS output pin */
#ifdef CONFIG_CXD56_GNSS_1PPS_PIN_GNSS_1PPS_OUT
CXD56_PIN_CONFIGS(PINCONFS_GNSS_1PPS_OUT);
#else
CXD56_PIN_CONFIGS(PINCONFS_HIF_IRQ_OUT_GNSS_1PPS_OUT);
#endif
}
else
{
/* Disable 1PPS output pin */
#ifdef CONFIG_CXD56_GNSS_1PPS_PIN_GNSS_1PPS_OUT
CXD56_PIN_CONFIGS(PINCONFS_GNSS_1PPS_OUT_GPIO);
#else
CXD56_PIN_CONFIGS(PINCONFS_HIF_IRQ_OUT_GPIO);
#endif
}
return fw_gd_set1ppsoutput(arg);
}
/****************************************************************************
* Name: cxd56_gnss_get_1pps_output
*
* Description:
* Get the current 1PPS output setting
*
* Input Parameters:
* filep - File structure pointer
* arg - Data for command
*
* Returned Value:
* Zero (OK) on success; a negated errno value on failure.
*
****************************************************************************/
static int cxd56_gnss_get_1pps_output(FAR struct file *filep,
unsigned long arg)
{
int ret;
uint32_t enable = 0;
if (!arg)
{
return -EINVAL;
}
ret = fw_gd_get1ppsoutput(&enable);
*(uint32_t *)arg = enable;
return ret;
}
/* Synchronized with processes and CPUs
@ -2102,7 +2253,7 @@ static void cxd56_gnss_read_backup_file(FAR int *retval)
break;
}
ret = GD_WriteBuffer(CXD56_CPU1_DATA_TYPE_BACKUP, offset, buf, n);
ret = fw_gd_writebuffer(CXD56_CPU1_DATA_TYPE_BACKUP, offset, buf, n);
if (ret < 0)
{
break;
@ -2172,7 +2323,7 @@ static void cxd56_gnss_common_signalhandler(uint32_t data,
if (issetmask)
{
GD_SetNotifyMask(sigtype, FALSE);
fw_gd_setnotifymask(sigtype, FALSE);
}
nxsem_post(&priv->devsem);
@ -2432,6 +2583,11 @@ static int8_t cxd56_gnss_select_notifytype(off_t fpos, FAR uint32_t *offset)
type = CXD56_CPU1_DATA_TYPE_DCREPORT;
*offset = 0;
}
else if (fpos == CXD56_GNSS_READ_OFFSET_SARRLM)
{
type = CXD56_CPU1_DATA_TYPE_SARRLM;
*offset = 0;
}
else
{
type = -1;
@ -2479,10 +2635,18 @@ static int cxd56_gnss_open(FAR struct file *filep)
FAR struct inode * inode;
FAR struct cxd56_gnss_dev_s *priv;
int ret = OK;
int retry = 50;
inode = filep->f_inode;
priv = (FAR struct cxd56_gnss_dev_s *)inode->i_private;
while (!g_rtc_enabled && 0 < retry--)
{
/* GNSS requires stable RTC */
usleep(100 * 1000);
}
ret = nxsem_wait(&priv->devsem);
if (ret < 0)
{
@ -2497,20 +2661,22 @@ static int cxd56_gnss_open(FAR struct file *filep)
goto _err0;
}
ret = PM_LoadImage(CXD56_GNSS_GPS_CPUID, CXD56_GNSS_FWNAME);
nxsem_set_protocol(&priv->syncsem, SEM_PRIO_NONE);
ret = fw_pm_loadimage(CXD56_GNSS_GPS_CPUID, CXD56_GNSS_FWNAME);
if (ret < 0)
{
goto _err1;
}
ret = PM_StartCpu(CXD56_GNSS_GPS_CPUID, 1);
ret = fw_pm_startcpu(CXD56_GNSS_GPS_CPUID, 1);
if (ret < 0)
{
goto _err2;
}
#ifndef CONFIG_CXD56_GNSS_HOT_SLEEP
PM_SleepCpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_DISABLE);
fw_pm_sleepcpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_DISABLE);
#endif
/* Wait the request from GNSS core to restore backup data,
@ -2524,8 +2690,8 @@ static int cxd56_gnss_open(FAR struct file *filep)
goto _err2;
}
ret = GD_WriteBuffer(CXD56_CPU1_DATA_TYPE_INFO, 0, &priv->shared_info,
sizeof(priv->shared_info));
ret = fw_gd_writebuffer(CXD56_CPU1_DATA_TYPE_INFO, 0,
&priv->shared_info, sizeof(priv->shared_info));
if (ret < 0)
{
goto _err2;
@ -2539,9 +2705,9 @@ static int cxd56_gnss_open(FAR struct file *filep)
_err2:
#ifndef CONFIG_CXD56_GNSS_HOT_SLEEP
PM_SleepCpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_ENABLE);
fw_pm_sleepcpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_ENABLE);
#endif
PM_SleepCpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_COLD);
fw_pm_sleepcpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_COLD);
_err1:
nxsem_destroy(&priv->syncsem);
_err0:
@ -2583,10 +2749,10 @@ static int cxd56_gnss_close(FAR struct file *filep)
if (priv->num_open == 0)
{
#ifndef CONFIG_CXD56_GNSS_HOT_SLEEP
PM_SleepCpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_ENABLE);
fw_pm_sleepcpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_HOT_ENABLE);
#endif
ret = PM_SleepCpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_COLD);
ret = fw_pm_sleepcpu(CXD56_GNSS_GPS_CPUID, PM_SLEEP_MODE_COLD);
if (ret < 0)
{
goto errout;
@ -2658,9 +2824,9 @@ static ssize_t cxd56_gnss_read(FAR struct file *filep, FAR char *buffer,
}
}
/* GD_ReadBuffer returns copied data size or negative error code */
/* fw_gd_readbuffer returns copied data size or negative error code */
ret = GD_ReadBuffer(type, offset, buffer, len);
ret = fw_gd_readbuffer(type, offset, buffer, len);
_err:
_success:
@ -2786,7 +2952,7 @@ static int cxd56_gnss_poll(FAR struct file *filep, FAR struct pollfd *fds,
priv->fds[i] = fds;
fds->priv = &priv->fds[i];
GD_SetNotifyMask(CXD56_CPU1_DEV_GNSS, FALSE);
fw_gd_setnotifymask(CXD56_CPU1_DEV_GNSS, FALSE);
break;
}
}
@ -2879,6 +3045,10 @@ static int cxd56_gnss_register(FAR const char *devpath)
{
CXD56_CPU1_DATA_TYPE_DCREPORT,
cxd56_gnss_common_signalhandler
},
{
CXD56_CPU1_DATA_TYPE_SARRLM,
cxd56_gnss_common_signalhandler
}
};
@ -2906,6 +3076,8 @@ static int cxd56_gnss_register(FAR const char *devpath)
goto _err0;
}
nxsem_set_protocol(&priv->apiwait, SEM_PRIO_NONE);
ret = nxsem_init(&priv->ioctllock, 0, 1);
if (ret < 0)
{

View file

@ -61,7 +61,7 @@
/* GD operation mode */
/* GD_SetOperationMode, GD_GetOperationMode */
/* fw_gd_setoperationmode, fw_gd_getoperationmode */
#define CXD56_GNSS_OPMOD_NORMAL 1
#define CXD56_GNSS_OPMOD_LOWPOWER 2
@ -76,293 +76,309 @@
* beginning to search the satellites and measure the receiver position
*/
int GD_Start(uint8_t startMode);
int fw_gd_start(uint8_t startmode);
/* Stop a positioning */
int GD_Stop(void);
int fw_gd_stop(void);
/* Select GNSSs to positioning
* These are able to specified by CXD56_GNSS_B_SAT_XXX defines.
*/
int GD_SelectSatelliteSystem(uint32_t system);
int fw_gd_selectsatellitesystem(uint32_t system);
/* Get current using GNSSs to positioning
* A argument 'satellite' indicates current GNSSs by bit fields defined
* by CXD56_GNSS_B_SAT_XXX.
*/
int GD_GetSatelliteSystem(FAR uint32_t *system);
int fw_gd_getsatellitesystem(FAR uint32_t *system);
/* Set the rough receiver position */
int GD_SetReceiverPositionEllipsoidal(FAR double *dLat, FAR double *dLon,
FAR double *dHeight);
int fw_gd_setreceiverpositionellipsoidal(FAR double *dlat, FAR double *dlon,
FAR double *dheight);
/* Set the rough receiver position as orgothonal */
int GD_SetReceiverPositionOrthogonal(int32_t dX, int32_t dY, int32_t dZ);
int fw_gd_setreceiverpositionorthogonal(int32_t dx, int32_t dy, int32_t dz);
/* Set enable or disable the 1PPS output. */
int GD_Set1ppsOutput(uint32_t enable);
int fw_gd_set1ppsoutput(uint32_t enable);
/* Get the current 1PPS output setting. */
int GD_Get1ppsOutput(FAR uint32_t *enable);
int fw_gd_get1ppsoutput(FAR uint32_t *enable);
/* Set the receiver operation mode
* 1st argument 'mode' is a operation mode defined by CXD56_GNSS_OPMOD_XXX.
* 2nd argument 'cycle' is a positioning period[ms], default is 1000[ms].
*/
int GD_SetOperationMode(uint32_t mode, uint32_t cycle);
int fw_gd_setoperationmode(uint32_t mode, uint32_t cycle);
/* Get the receiver operation mode */
int GD_GetOperationMode(FAR uint32_t *mode, FAR uint32_t *cycle);
int fw_gd_getoperationmode(FAR uint32_t *mode, FAR uint32_t *cycle);
/* Set the TCXO offset */
int GD_SetTcxoOffset(int32_t offset);
int fw_gd_settcxooffset(int32_t offset);
/* Get the TCXO offset */
int GD_GetTcxoOffset(FAR int32_t *offset);
int fw_gd_gettcxooffset(FAR int32_t *offset);
/* Set the estimated current time of the receiver.
* 1st argument date & time are in UTC.
*/
int GD_SetTime(FAR struct cxd56_gnss_date_s *date,
int fw_gd_settime(FAR struct cxd56_gnss_date_s *date,
FAR struct cxd56_gnss_time_s *time);
/* Set the network time */
int GD_SetFrameTime(uint16_t sec, uint32_t fracSec);
int fw_gd_setframetime(uint16_t sec, uint32_t fracsec);
/* Get the almanac data */
int GD_GetAlmanac(uint32_t satellite, FAR uint32_t *almanac,
FAR uint32_t *almanacSize);
int fw_gd_getalmanac(uint32_t satellite, FAR uint32_t *almanac,
FAR uint32_t *almanacsize);
/* Set the almanac data */
int GD_SetAlmanac(uint32_t satellite, FAR uint32_t *almanac);
int fw_gd_setalmanac(uint32_t satellite, FAR uint32_t *almanac);
/* Get the Ephemeris data */
int GD_GetEphemeris(uint32_t satellite, FAR uint32_t *ephemeris,
FAR uint32_t *ephemerisSize);
int fw_gd_getephemeris(uint32_t satellite, FAR uint32_t *ephemeris,
FAR uint32_t *ephemerissize);
/* Set the Ephemeris data */
int GD_SetEphemeris(uint32_t satellite, FAR uint32_t *ephemeris);
int fw_gd_setephemeris(uint32_t satellite, FAR uint32_t *ephemeris);
/* Select to use or not use the initial position calculation supporting
* information of the QZSS L1-SAIF.
*/
int GD_SetQzssPosAssist(uint32_t enable);
int fw_gd_setqzssposassist(uint32_t enable);
/* Get a setting of the initial position calculation supporting
* information of the QZSS L1-SAIF.
*/
int GD_GetQzssPosAssist(FAR uint32_t *enable);
int fw_gd_getqzssposassist(FAR uint32_t *enable);
/* Set IMES bitrates. */
int GD_SetImesBitrate(uint32_t bitrate);
int fw_gd_setimesbitrate(uint32_t bitrate);
/* Get IMES bitrates. */
int GD_GetImesBitrate(FAR uint32_t *bitrate);
int fw_gd_getimesbitrate(FAR uint32_t *bitrate);
/* Set IMES center frequency offset. */
int GD_SetImesCenterFreqOffset(uint32_t offset);
int fw_gd_setimescenterfreqoffset(uint32_t offset);
/* Set IMES preamble. */
int GD_SetImesPreamble(uint32_t preamble);
int fw_gd_setimespreamble(uint32_t preamble);
/* Start GPS test */
void GD_StartGpsTest(uint32_t satellite, uint32_t reserve1,
void fw_gd_startgpstest(uint32_t satellite, uint32_t reserve1,
uint32_t reserve2, uint32_t reserve3);
/* Stop GPS test */
int GD_StopGpsTest(void);
int fw_gd_stopgpstest(void);
/* Get GPS test result */
int GD_GetGpsTestResult(FAR float *cn, FAR float *doppler);
int fw_gd_getgpstestresult(FAR float *cn, FAR float *doppler);
/* Control Spectrum output */
int GD_SpectrumControl(unsigned long time, unsigned int enable,
unsigned char moniPoint1, unsigned char step1,
unsigned char moniPoint2, unsigned char step2);
int fw_gd_spectrumcontrol(unsigned long time, unsigned int enable,
unsigned char monipoint1, unsigned char step1,
unsigned char monipoint2, unsigned char step2);
/* Save the backup data to a Flash memory. */
int GD_SaveBackupdata(void);
int fw_gd_savebackupdata(void);
/* CEP Check Assist Data Valid */
int GD_CepCheckAssistData(void);
int fw_gd_cepcheckassistdata(void);
/* CEP Get Age Data */
int GD_CepGetAgeData(FAR float *age, FAR float *cepi);
int fw_gd_cepgetagedata(FAR float *age, FAR float *cepi);
/* CEP Reset Assist Data init flag & valid flag */
int GD_CepInitAssistData(void);
int fw_gd_cepinitassistdata(void);
/* AGPS Set tau */
int GD_SetTauGps(FAR double *tau);
int fw_gd_settaugps(FAR double *tau);
/* AGPS Set Acquist */
int GD_SetAcquist(FAR uint8_t *pAcquistData, uint16_t acquistSize);
int fw_gd_setacquist(FAR uint8_t *pacquistdata, uint16_t acquistsize);
/* Set the estimated current time of the receiver.
* 1st argument date & time are in GPS time.
*/
int GD_SetTimeGps(FAR struct cxd56_gnss_date_s *date,
int fw_gd_settimegps(FAR struct cxd56_gnss_date_s *date,
FAR struct cxd56_gnss_time_s *time);
/* Clear Receiver Information */
int GD_ClearReceiverInfo(uint32_t type);
int fw_gd_clearreceiverinfo(uint32_t type);
/* AGPS Set Tow Assist */
int GD_SetTowAssist(FAR uint8_t *pAssistData, uint16_t dataSize);
int fw_gd_settowassist(FAR uint8_t *passistdata, uint16_t datasize);
/* AGPS Set UTC Model */
int GD_SetUtcModel(FAR uint8_t *pModelData, uint16_t dataSize);
int fw_gd_setutcmodel(FAR uint8_t *pmodeldata, uint16_t datasize);
/* Read GNSS data to specified buffer */
int GD_ReadBuffer(uint8_t type, int32_t offset, FAR void *buf,
int fw_gd_readbuffer(uint8_t type, int32_t offset, FAR void *buf,
uint32_t length);
/* Write GNSS data from specified buffer */
int GD_WriteBuffer(uint8_t type, int32_t offset, FAR void *buf,
int fw_gd_writebuffer(uint8_t type, int32_t offset, FAR void *buf,
uint32_t length);
/* Set notify mask, this mask flag is cleared when notified(poll/signal) */
int GD_SetNotifyMask(uint8_t type, uint8_t clear);
int fw_gd_setnotifymask(uint8_t type, uint8_t clear);
/* Geofence Add Region */
int GD_GeoAddRegion(uint8_t id, long lat, long lon, uint16_t rad);
int fw_gd_geoaddregion(uint8_t id, long lat, long lon, uint16_t rad);
/* Geofence Modify Region */
int GD_GeoModifyRegion(uint8_t id, long lat, long lon, uint16_t rad);
int fw_gd_geomodifyregion(uint8_t id, long lat, long lon, uint16_t rad);
/* Geofence Delete Region */
int GD_GeoDeleteRegione(uint8_t id);
int fw_gd_geodeleteregione(uint8_t id);
/* Geofence All delete Region */
int GD_GeoDeleteAllRegion(void);
int fw_gd_geodeleteallregion(void);
/* Geofence Region check */
int GD_GeoGetRegionData(uint8_t id, FAR long *lat, FAR long *lon,
int fw_gd_geogetregiondata(uint8_t id, FAR long *lat, FAR long *lon,
FAR uint16_t *rad);
/* Geofence Get Used Region ID */
uint32_t GD_GeoGetUsedRegionId(void);
uint32_t fw_gd_geogetusedregionid(void);
/* Geofence Set mode */
int GD_GeoSetOpMode(uint16_t deadzone, uint16_t dwell_detecttime);
int fw_gd_geosetopmode(uint16_t deadzone, uint16_t dwell_detecttime);
/* Geofence Request All region notify */
int GD_GeoSetAllRgionNotifyRequest(void);
int fw_gd_geosetallrgionnotifyrequest(void);
/* Geofence Register to gnss_provider */
int GD_RegisterGeofence(void);
int fw_gd_registergeofence(void);
/* Geofence Release from gnss_provider */
int GD_ReleaseGeofence(void);
int fw_gd_releasegeofence(void);
/* Pvtlog Register to gnss_provider */
int GD_RegisterPvtlog(uint32_t cycle, uint32_t threshold);
int fw_gd_registerpvtlog(uint32_t cycle, uint32_t threshold);
/* Pvtlog Release */
int GD_ReleasePvtlog(void);
int fw_gd_releasepvtlog(void);
/* Pvtlog Delete log data */
int GD_PvtlogDeleteLog(void);
int fw_gd_pvtlogdeletelog(void);
/* Pvtlog Get Log status */
int GD_PvtlogGetLogStatus(FAR struct cxd56_gnss_status_s *pLogStatus);
int fw_gd_pvtloggetlogstatus(FAR struct cxd56_gnss_status_s *plogstatus);
/* Start outputting carrier phase info. */
int GD_RtkStart(FAR struct cxd56_rtk_setting_s *pParam);
int fw_gd_rtkstart(FAR struct cxd56_rtk_setting_s *pparam);
/* Stop outputting carrier phase info. */
int GD_RtkStop(void);
int fw_gd_rtkstop(void);
/* Set output interval of carrier phase info.
*
* interval : CXD56_GNSS_RTK_INTERVAL_XXX (gd_type.h)
*/
int GD_RtkSetOutputInterval(int interval);
int fw_gd_rtksetoutputinterval(int interval);
/* Get output interval of carrier phase info. [ms] */
int GD_RtkGetOutputInterval(FAR int *interval);
int fw_gd_rtkgetoutputinterval(FAR int *interval);
/* Set GNSS of outputting carrier phase info. */
int GD_RtkSetGnss(uint32_t gnss);
int fw_gd_rtksetgnss(uint32_t gnss);
/* Get GNSS of outputting carrier phase info. */
int GD_RtkGetGnss(FAR uint32_t *pGnss);
int fw_gd_rtkgetgnss(FAR uint32_t *pgnss);
/* Set enable/disable GD to notify updating ephemeris */
int GD_RtkSetEphNotify(int enable);
int fw_gd_rtksetephnotify(int enable);
/* Get enable/disable GD to notify updating ephemeris */
int GD_RtkGetEphNotify(FAR int *enable);
int fw_gd_rtkgetephnotify(FAR int *enable);
/* Set the Ephemeris data Ephemeris data size is variable. */
int GD_SetVarEphemeris(uint32_t *ephemeris, uint32_t ephemerisSize);
int fw_gd_setvarephemeris(uint32_t *ephemeris, uint32_t ephemerissize);
/* Get the Ephemeris data Ephemeris data size is variable. */
int GD_GetVarEphemeris(uint32_t satellite, uint32_t *ephemeris,
uint32_t ephemerisSize);
int fw_gd_getvarephemeris(uint32_t satellite, uint32_t *ephemeris,
uint32_t ephemerissize);
/* Set usecase mode */
int fw_gd_setusecase(uint32_t usecase);
/* Get usecase mode */
int fw_gd_getusecase(uint32_t *usecase);
/* Set enable or disable of 1PPS output */
int fw_gd_set1ppsoutput(uint32_t enable);
/* Get the current 1PPS output setting */
int fw_gd_get1ppsoutput(uint32_t *enable);
#endif /* __ARCH_ARM_SRC_CXD56XX_CXD56_GNSS_API_H */

View file

@ -146,6 +146,9 @@ static struct cxd56_i2cdev_s g_i2c2dev =
* Private Functions
****************************************************************************/
static inline int i2c_takesem(FAR sem_t *sem);
static inline int i2c_givesem(FAR sem_t *sem);
static inline uint32_t i2c_reg_read(struct cxd56_i2cdev_s *priv,
uint32_t offset);
static inline void i2c_reg_write(struct cxd56_i2cdev_s *priv,
@ -172,6 +175,24 @@ static int cxd56_i2c_transfer_scu(FAR struct i2c_master_s *dev,
FAR struct i2c_msg_s *msgs, int count);
#endif
/****************************************************************************
* Name: i2c_takesem
****************************************************************************/
static inline int i2c_takesem(FAR sem_t *sem)
{
return nxsem_wait_uninterruptible(sem);
}
/****************************************************************************
* Name: i2c_givesem
****************************************************************************/
static inline int i2c_givesem(FAR sem_t *sem)
{
return nxsem_post(sem);
}
/****************************************************************************
* Name: cxd56_i2c_pincontrol
*
@ -368,7 +389,7 @@ static void cxd56_i2c_timeout(int argc, uint32_t arg, ...)
irqstate_t flags = enter_critical_section();
priv->error = -ENODEV;
nxsem_post(&priv->wait);
i2c_givesem(&priv->wait);
leave_critical_section(flags);
}
@ -475,7 +496,7 @@ static int cxd56_i2c_interrupt(int irq, FAR void *context, FAR void *arg)
ret = wd_cancel(priv->timeout);
if (ret == OK)
{
nxsem_post(&priv->wait);
i2c_givesem(&priv->wait);
}
}
@ -538,7 +559,7 @@ static int cxd56_i2c_receive(struct cxd56_i2cdev_s *priv, int last)
i2c_reg_rmw(priv, CXD56_IC_INTR_MASK, INTR_RX_FULL, INTR_RX_FULL);
leave_critical_section(flags);
nxsem_wait(&priv->wait);
i2c_takesem(&priv->wait);
if (priv->error != OK)
{
@ -584,7 +605,7 @@ static int cxd56_i2c_send(struct cxd56_i2cdev_s *priv, int last)
i2c_reg_rmw(priv, CXD56_IC_INTR_MASK, INTR_TX_EMPTY, INTR_TX_EMPTY);
leave_critical_section(flags);
nxsem_wait(&priv->wait);
i2c_takesem(&priv->wait);
return 0;
}
@ -613,7 +634,7 @@ static int cxd56_i2c_transfer(FAR struct i2c_master_s *dev,
/* Get exclusive access to the I2C bus */
nxsem_wait(&priv->mutex);
i2c_takesem(&priv->mutex);
/* Check wait semaphore value. If the value is not 0, the transfer can not
* be performed normally.
@ -691,7 +712,8 @@ static int cxd56_i2c_transfer(FAR struct i2c_master_s *dev,
cxd56_i2c_clock_gate_enable(priv->port);
nxsem_post(&priv->mutex);
i2c_givesem(&priv->mutex);
return ret;
}
@ -829,7 +851,7 @@ static int cxd56_i2c_transfer_scu(FAR struct i2c_master_s *dev,
/* Get exclusive access to the I2C bus */
nxsem_wait(&priv->mutex);
i2c_takesem(&priv->mutex);
/* Apply frequency for request msgs */
@ -866,7 +888,7 @@ static int cxd56_i2c_transfer_scu(FAR struct i2c_master_s *dev,
}
}
nxsem_post(&priv->mutex);
i2c_givesem(&priv->mutex);
return ret;
}
@ -1031,6 +1053,7 @@ struct i2c_master_s *cxd56_i2cbus_initialize(int port)
nxsem_init(&priv->mutex, 0, 1);
nxsem_init(&priv->wait, 0, 0);
nxsem_set_protocol(&priv->wait, SEM_PRIO_NONE);
priv->timeout = wd_create();

View file

@ -163,6 +163,11 @@ static int icc_semtake(sem_t *semid)
return nxsem_wait_uninterruptible(semid);
}
static int icc_semtrytake(sem_t *semid)
{
return sem_trywait(semid);
}
static void icc_semgive(sem_t *semid)
{
nxsem_post(semid);
@ -314,20 +319,31 @@ static int icc_recv(FAR struct iccdev_s *priv, FAR iccmsg_t *msg, int32_t ms)
irqstate_t flags;
int ret = OK;
if (ms)
if (ms == -1)
{
/* Try to take the semaphore without waiging. */
ret = icc_semtrytake(&priv->rxwait);
if (ret < 0)
{
ret = -get_errno();
return ret;
}
}
else if (ms == 0)
{
icc_semtake(&priv->rxwait);
}
else
{
int32_t timo;
timo = ms * 1000 / CONFIG_USEC_PER_TICK;
wd_start(priv->rxtimeout, timo, icc_rxtimeout, 1, (uint32_t)priv);
}
ret = icc_semtake(&priv->rxwait);
if (ret < 0)
{
return ret;
}
icc_semtake(&priv->rxwait);
wd_cancel(priv->rxtimeout);
wd_cancel(priv->rxtimeout);
}
flags = enter_critical_section();
req = (FAR struct iccreq_s *)sq_remfirst(&priv->recvq);
@ -366,6 +382,7 @@ static FAR struct iccdev_s *icc_devnew(void)
priv->rxtimeout = wd_create();
nxsem_init(&priv->rxwait, 0, 0);
nxsem_set_protocol(&priv->rxwait, SEM_PRIO_NONE);
/* Initialize receive queue and free list */

View file

@ -377,8 +377,7 @@ int cxd56_pin_configs(uint32_t pinconfs[], size_t n)
/* Set HostIF latch off */
if (((PIN_SPI2_CS_X <= pin) && (pin <= latch_endpin)) &&
(PINCONF_MODE0 == mode))
if ((PIN_SPI2_CS_X <= pin) && (pin <= latch_endpin))
{
modifyreg32(CXD56_TOPREG_DBG_HOSTIF_SEL,
LATCH_OFF_MASK,

View file

@ -163,7 +163,7 @@ struct pmic_temp_mode_s
int high;
};
extern int pm_pmic_control(int cmd, void *arg);
extern int fw_pm_pmiccontrol(int cmd, void *arg);
/****************************************************************************
* Private Data
@ -299,7 +299,7 @@ static int pmic_int_handler(int irq, void *context, void *arg)
int cxd56_pmic_get_interrupt_status(uint8_t *status)
{
return pm_pmic_control(PMIC_CMD_INTSTATUS, status);
return fw_pm_pmiccontrol(PMIC_CMD_INTSTATUS, status);
}
/****************************************************************************
@ -347,7 +347,7 @@ int cxd56_pmic_set_gpo_reg(uint8_t *setbit0, uint8_t *clrbit0,
.clrbit1 = clrbit1,
};
return pm_pmic_control(PMIC_CMD_GPO, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_GPO, &arg);
}
/****************************************************************************
@ -485,6 +485,51 @@ bool cxd56_pmic_get_gpo(uint8_t chset)
return false;
}
/****************************************************************************
* Name: cxd56_pmic_get_gpo_hiz
*
* Description:
* Get the tristate value from the specified GPO channel(s)
*
* Input Parameter:
* chset : GPO Channel number(s)
*
* Returned Value:
* Return 0(off), 1(on) or -1(HiZ)
*
****************************************************************************/
int cxd56_pmic_get_gpo_hiz(uint8_t chset)
{
uint8_t setbit0 = 0;
uint8_t clrbit0 = 0;
uint8_t setbit1 = 0;
uint8_t clrbit1 = 0;
uint8_t set;
uint8_t hiz;
cxd56_pmic_set_gpo_reg(&setbit0, &clrbit0, &setbit1, &clrbit1);
set = ((setbit1 & 0xf) << 4) | (setbit0 & 0xf);
hiz = ((setbit1) & 0xf0) | ((setbit0 & 0xf0) >> 4);
/* If all of the specified chset is hiz, return -1 */
if ((hiz & chset) != chset)
{
return -1;
}
/* If all of the specified chset is high, return 1 */
if ((set & chset) == chset)
{
return 1;
}
return 0;
}
/****************************************************************************
* Name: cxd56_pmic_set_loadswitch_reg
*
@ -522,7 +567,7 @@ int cxd56_pmic_set_loadswitch_reg(uint8_t *setbit, uint8_t *clrbit)
.clrbit = clrbit,
};
return pm_pmic_control(PMIC_CMD_LOADSW, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_LOADSW, &arg);
}
/****************************************************************************
@ -620,7 +665,7 @@ int cxd56_pmic_set_ddc_ldo_reg(uint8_t *setbit, uint8_t *clrbit)
.clrbit = clrbit,
};
return pm_pmic_control(PMIC_CMD_DDCLDO, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_DDCLDO, &arg);
}
/****************************************************************************
@ -740,7 +785,7 @@ error:
int cxd56_pmic_get_gauge(FAR struct pmic_gauge_s *gauge)
{
return pm_pmic_control(PMIC_CMD_AFE, gauge);
return fw_pm_pmiccontrol(PMIC_CMD_AFE, gauge);
}
/****************************************************************************
@ -759,7 +804,7 @@ int cxd56_pmic_get_gauge(FAR struct pmic_gauge_s *gauge)
int cxd56_pmic_getlowervol(FAR int *voltage)
{
return pm_pmic_control(PMIC_CMD_GETVSYS, voltage);
return fw_pm_pmiccontrol(PMIC_CMD_GETVSYS, voltage);
}
/****************************************************************************
@ -778,7 +823,7 @@ int cxd56_pmic_getlowervol(FAR int *voltage)
int cxd56_pmic_setlowervol(int voltage)
{
return pm_pmic_control(PMIC_CMD_SETVSYS, (void *)voltage);
return fw_pm_pmiccontrol(PMIC_CMD_SETVSYS, (void *)voltage);
}
/****************************************************************************
@ -797,7 +842,7 @@ int cxd56_pmic_setlowervol(int voltage)
int cxd56_pmic_getnotifyvol(FAR int *voltage)
{
return pm_pmic_control(PMIC_CMD_GETPREVSYS, voltage);
return fw_pm_pmiccontrol(PMIC_CMD_GETPREVSYS, voltage);
}
/****************************************************************************
@ -816,7 +861,7 @@ int cxd56_pmic_getnotifyvol(FAR int *voltage)
int cxd56_pmic_setnotifyvol(int voltage)
{
return pm_pmic_control(PMIC_CMD_SETPREVSYS, (void *)voltage);
return fw_pm_pmiccontrol(PMIC_CMD_SETPREVSYS, (void *)voltage);
}
/****************************************************************************
@ -838,7 +883,7 @@ int cxd56_pmic_getchargevol(FAR int *voltage)
int val;
int ret;
ret = pm_pmic_control(PMIC_CMD_GET_CHG_VOLTAGE, &val);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_VOLTAGE, &val);
if (ret)
{
return -EIO;
@ -894,7 +939,7 @@ int cxd56_pmic_setchargevol(int voltage)
val = (voltage - 4000) / 50;
return pm_pmic_control(PMIC_CMD_SET_CHG_VOLTAGE, (void *)val);
return fw_pm_pmiccontrol(PMIC_CMD_SET_CHG_VOLTAGE, (void *)val);
}
/****************************************************************************
@ -917,7 +962,7 @@ int cxd56_pmic_getchargecurrent(FAR int *current)
int val;
int ret;
ret = pm_pmic_control(PMIC_CMD_GET_CHG_CURRENT, &val);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_CURRENT, &val);
if (ret)
{
return ret;
@ -985,7 +1030,7 @@ int cxd56_pmic_setchargecurrent(int current)
return -EFAULT;
}
return pm_pmic_control(PMIC_CMD_SET_CHG_CURRENT, (void *)val);
return fw_pm_pmiccontrol(PMIC_CMD_SET_CHG_CURRENT, (void *)val);
}
/****************************************************************************
@ -1004,7 +1049,7 @@ int cxd56_pmic_setchargecurrent(int current)
int cxd56_pmic_getporttype(FAR int *porttype)
{
return pm_pmic_control(PMIC_CMD_GET_USB_PORT_TYPE, porttype);
return fw_pm_pmiccontrol(PMIC_CMD_GET_USB_PORT_TYPE, porttype);
}
/****************************************************************************
@ -1029,7 +1074,7 @@ int cxd56_pmic_getchargestate(uint8_t *state)
/* Update charge state */
ret = pm_pmic_control(PMIC_CMD_AFE, &arg);
ret = fw_pm_pmiccontrol(PMIC_CMD_AFE, &arg);
if (ret)
{
return ret;
@ -1037,7 +1082,7 @@ int cxd56_pmic_getchargestate(uint8_t *state)
/* Get actual charging state (CNT_USB1) */
ret = pm_pmic_control(PMIC_CMD_GET_CHG_STATE, &val);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_STATE, &val);
*state = val & 0xff;
return ret;
@ -1086,7 +1131,7 @@ int cxd56_pmic_setrechargevol(int mv)
return -EINVAL;
}
return pm_pmic_control(PMIC_CMD_SET_RECHG_VOLTAGE, (void *)val);
return fw_pm_pmiccontrol(PMIC_CMD_SET_RECHG_VOLTAGE, (void *)val);
}
/****************************************************************************
@ -1109,7 +1154,7 @@ int cxd56_pmic_getrechargevol(FAR int *mv)
int val;
int ret;
ret = pm_pmic_control(PMIC_CMD_GET_RECHG_VOLTAGE, &val);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_RECHG_VOLTAGE, &val);
if (ret)
{
return ret;
@ -1189,7 +1234,7 @@ int cxd56_pmic_setchargecompcurrent(int current)
break;
}
return pm_pmic_control(PMIC_CMD_SET_CHG_IFIN, (void *)val);
return fw_pm_pmiccontrol(PMIC_CMD_SET_CHG_IFIN, (void *)val);
}
/****************************************************************************
@ -1211,7 +1256,7 @@ int cxd56_pmic_getchargecompcurrent(FAR int *current)
int val;
int ret;
ret = pm_pmic_control(PMIC_CMD_GET_CHG_IFIN, &val);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_IFIN, &val);
if (ret)
{
return ret;
@ -1269,7 +1314,7 @@ int cxd56_pmic_gettemptable(FAR struct pmic_temp_table_s *table)
{
/* SET_T60 (70h) - SET_T0_2 (78h) */
return pm_pmic_control(PMIC_CMD_GET_CHG_TEMPERATURE_TABLE, table);
return fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_TEMPERATURE_TABLE, table);
}
/****************************************************************************
@ -1289,7 +1334,7 @@ int cxd56_pmic_gettemptable(FAR struct pmic_temp_table_s *table)
int cxd56_pmic_settemptable(FAR struct pmic_temp_table_s *table)
{
return pm_pmic_control(PMIC_CMD_SET_CHG_TEMPERATURE_TABLE, table);
return fw_pm_pmiccontrol(PMIC_CMD_SET_CHG_TEMPERATURE_TABLE, table);
}
/****************************************************************************
@ -1342,7 +1387,7 @@ int cxd56_pmic_setchargemode(int low, int high)
return -EINVAL;
}
return pm_pmic_control(PMIC_CMD_SET_CHG_TEMPERATURE_MODE, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_SET_CHG_TEMPERATURE_MODE, &arg);
}
/****************************************************************************
@ -1369,7 +1414,7 @@ int cxd56_pmic_getchargemode(FAR int *low, FAR int *high)
struct pmic_temp_mode_s arg;
int ret;
ret = pm_pmic_control(PMIC_CMD_GET_CHG_TEMPERATURE_MODE, &arg);
ret = fw_pm_pmiccontrol(PMIC_CMD_GET_CHG_TEMPERATURE_MODE, &arg);
if (ret)
{
return ret;
@ -1388,22 +1433,22 @@ int cxd56_pmic_getchargemode(FAR int *low, FAR int *high)
int cxd56_pmic_monitor_enable(FAR struct pmic_mon_s *ptr)
{
return pm_pmic_control(PMIC_CMD_POWER_MONITOR_ENABLE, ptr);
return fw_pm_pmiccontrol(PMIC_CMD_POWER_MONITOR_ENABLE, ptr);
}
int cxd56_pmic_monitor_status(FAR struct pmic_mon_status_s *ptr)
{
return pm_pmic_control(PMIC_CMD_POWER_MONITOR_STATUS, ptr);
return fw_pm_pmiccontrol(PMIC_CMD_POWER_MONITOR_STATUS, ptr);
}
int cxd56_pmic_monitor_set(FAR struct pmic_mon_set_s *ptr)
{
return pm_pmic_control(PMIC_CMD_POWER_MONITOR_SET, ptr);
return fw_pm_pmiccontrol(PMIC_CMD_POWER_MONITOR_SET, ptr);
}
int cxd56_pmic_monitor_get(FAR struct pmic_mon_log_s *ptr)
{
return pm_pmic_control(PMIC_CMD_POWER_MONITOR_GET, ptr);
return fw_pm_pmiccontrol(PMIC_CMD_POWER_MONITOR_GET, ptr);
}
#endif
@ -1505,7 +1550,7 @@ int cxd56_pmic_read(uint8_t addr, void *buf, uint32_t size)
.size = size,
};
return pm_pmic_control(PMIC_CMD_READ, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_READ, &arg);
}
/****************************************************************************
@ -1540,7 +1585,7 @@ int cxd56_pmic_write(uint8_t addr, void *buf, uint32_t size)
.size = size,
};
return pm_pmic_control(PMIC_CMD_WRITE, &arg);
return fw_pm_pmiccontrol(PMIC_CMD_WRITE, &arg);
}
#endif /* CONFIG_CXD56_PMIC */

View file

@ -309,6 +309,22 @@ int cxd56_pmic_set_gpo_hiz(uint8_t chset);
bool cxd56_pmic_get_gpo(uint8_t chset);
/****************************************************************************
* Name: cxd56_pmic_get_gpo_hiz
*
* Description:
* Get the tristate value from the specified GPO channel(s)
*
* Input Parameter:
* chset : GPO Channel number(s)
*
* Returned Value:
* Return 0(off), 1(on) or -1(HiZ)
*
****************************************************************************/
int cxd56_pmic_get_gpo_hiz(uint8_t chset);
/****************************************************************************
* Name: cxd56_pmic_set_loadswitch_reg
*

View file

@ -164,6 +164,8 @@ static void cxd56_pm_do_hotsleep(uint32_t idletime);
static void cxd56_pm_intc_suspend(void);
static void cxd56_pm_intc_resume(void);
#endif
static int cxd56_pmmsghandler(int cpuid, int protoid, uint32_t pdata,
uint32_t data, FAR void *userdata);
/****************************************************************************
* Private Data
@ -171,6 +173,7 @@ static void cxd56_pm_intc_resume(void);
static struct cxd56_pm_target_id_s g_target_id_table;
static mqd_t g_queuedesc;
static sem_t g_bootsync;
static sem_t g_regcblock;
static sem_t g_freqlock;
static sem_t g_freqlockwait;
@ -432,6 +435,29 @@ static int cxd56_pm_maintask(int argc, FAR char *argv[])
{
int size;
struct cxd56_pm_message_s message;
struct mq_attr attr;
attr.mq_maxmsg = 8;
attr.mq_msgsize = sizeof(struct cxd56_pm_message_s);
attr.mq_curmsgs = 0;
attr.mq_flags = 0;
g_queuedesc = mq_open("cxd56_pm_message", O_RDWR | O_CREAT, 0666, &attr);
DEBUGASSERT((int)g_queuedesc != ERROR);
if (g_queuedesc < 0)
{
pmerr("Failed to create message queue\n");
}
/* Register power manager messaging protocol handler. */
cxd56_iccinit(CXD56_PROTO_PM);
cxd56_iccregisterhandler(CXD56_PROTO_PM, cxd56_pmmsghandler, NULL);
/* Notify that cxd56_pm_maintask is ready */
nxsem_post(&g_bootsync);
while (1)
{
@ -787,16 +813,9 @@ int cxd56_pm_hotsleep(int idletime)
int cxd56_pm_initialize(void)
{
struct mq_attr attr;
int taskid;
int ret;
cxd56_iccinit(CXD56_PROTO_PM);
/* Register power manager messaging protocol handler. */
cxd56_iccregisterhandler(CXD56_PROTO_PM, cxd56_pmmsghandler, NULL);
dq_init(&g_cbqueue);
sq_init(&g_freqlockqueue);
sq_init(&g_wakelockqueue);
@ -814,19 +833,17 @@ int cxd56_pm_initialize(void)
}
ret = nxsem_init(&g_freqlockwait, 0, 0);
nxsem_set_protocol(&g_freqlockwait, SEM_PRIO_NONE);
if (ret < 0)
{
return ret;
}
attr.mq_maxmsg = 8;
attr.mq_msgsize = sizeof(struct cxd56_pm_message_s);
attr.mq_curmsgs = 0;
attr.mq_flags = 0;
g_queuedesc = mq_open("cxd56_pm_message", O_RDWR | O_CREAT, 0666, &attr);
if (g_queuedesc < 0)
ret = nxsem_init(&g_bootsync, 0, 0);
nxsem_set_protocol(&g_bootsync, SEM_PRIO_NONE);
if (ret < 0)
{
return -EPERM;
return ret;
}
taskid = task_create("cxd56_pm_task", CXD56_PM_TASK_PRIO,
@ -837,6 +854,10 @@ int cxd56_pm_initialize(void)
return -EPERM;
}
/* wait until cxd56_pm_maintask thread is ready */
cxd56_pm_semtake(&g_bootsync);
return OK;
}
@ -985,16 +1006,16 @@ uint32_t up_pm_clr_bootmask(uint32_t mask)
int up_pm_sleep(enum pm_sleepmode_e mode)
{
int PM_DeepSleep(void *);
int PM_ColdSleep(void *);
int fw_pm_deepsleep(void *);
int fw_pm_coldsleep(void *);
switch (mode)
{
case PM_SLEEP_DEEP:
PM_DeepSleep(NULL);
fw_pm_deepsleep(NULL);
break;
case PM_SLEEP_COLD:
PM_ColdSleep(NULL);
fw_pm_coldsleep(NULL);
break;
}
@ -1012,8 +1033,8 @@ int up_pm_sleep(enum pm_sleepmode_e mode)
int up_pm_reboot(void)
{
void PM_Reboot(void);
PM_Reboot();
void fw_pm_reboot(void);
fw_pm_reboot();
__asm volatile ("dsb");
for (; ; );
}

View file

@ -63,16 +63,17 @@
#define PWM_REG(ch) \
( \
(PWM_REG_t*)(PWM_REG_BASE + (sizeof(PWM_REG_t) * (ch))) \
(pwm_reg_t*)(PWM_REG_BASE + (sizeof(pwm_reg_t) * (ch))) \
)
#define PWM_PHASE_REG(ch) \
( \
(PWM_PHASE_REG_t*) \
(PWM_PHASE_REG_BASE + (sizeof(PWM_PHASE_REG_t) * (ch))) \
(pwm_phase_reg_t*) \
(PWM_PHASE_REG_BASE + (sizeof(pwm_phase_reg_t) * (ch))) \
)
#define PWM_PARAM_OFFPERIOD_SHIFT (16)
#define PWM_PHASE_PRESCALE_SHIFT (16)
#ifndef itemsof
# define itemsof(array) (sizeof(array)/sizeof(array[0]))
@ -96,12 +97,12 @@ typedef struct
volatile uint32_t PARAM;
volatile uint32_t EN;
volatile uint32_t UPDATE;
} PWM_REG_t;
} pwm_reg_t;
typedef struct
{
volatile uint32_t PHASE;
} PWM_PHASE_REG_t;
} pwm_phase_reg_t;
/****************************************************************************
* Static Function Prototypes
@ -218,19 +219,23 @@ static int pwm_pin_config(uint32_t channel)
*
* Output Parameters:
* param - set value of PWM_PARAM register
* phase - set value of PWM_PHASE register
*
* Returned Value:
* OK on success; A negated errno value on failure.
*
****************************************************************************/
static int convert_freq2period(uint32_t freq, ub16_t duty, uint32_t *param)
static int convert_freq2period(uint32_t freq, ub16_t duty, uint32_t *param,
uint32_t *phase)
{
DEBUGASSERT(param);
DEBUGASSERT(phase);
uint32_t pwmfreq = 0;
uint32_t period = 0;
uint32_t offperiod = 0;
uint32_t prescale = 0;
/* Get frequency of pwm base clock */
@ -243,10 +248,10 @@ static int convert_freq2period(uint32_t freq, ub16_t duty, uint32_t *param)
/* check frequency range */
if ((freq > ((pwmfreq + 1) >> 1)) || (freq < (pwmfreq >> 16)))
if ((freq > ((pwmfreq + 1) >> 1)) || (freq <= 0))
{
pwmerr("Frequency out of range. %d [Effective range:%d - %d]\n",
freq, pwmfreq >> 16, (pwmfreq + 1) >> 1);
freq, 1, (pwmfreq + 1) >> 1);
return -1;
}
@ -258,26 +263,65 @@ static int convert_freq2period(uint32_t freq, ub16_t duty, uint32_t *param)
return -1;
}
/* calcurate prescale */
if ((freq << 8) < (pwmfreq >> 8))
{
for (prescale = 1; prescale <= 8; prescale++)
{
if (freq > ((pwmfreq >> prescale) / 65535))
{
break;
}
}
}
/* calculate period and offperiod */
period = (pwmfreq * 10 / freq - 5) / 10;
if (prescale > 0)
{
period = (((pwmfreq * 10) >> prescale) / freq + 5) / 10;
}
else
{
period = (pwmfreq * 10 / freq - 5) / 10;
}
if (period > 0xffff)
{
period = 0xffff;
}
offperiod = ((0x10000 - duty) * (period + 1) + 0x8000) >> 16;
if (offperiod == 0)
if (prescale > 0)
{
offperiod = 0;
offperiod = ((0x10000 - duty) * period + (1 << (16 - prescale))) >> 16;
if (offperiod < 2)
{
pwmerr("Duty out of range. %d\n", duty);
return -1;
}
}
else if (period < offperiod)
else
{
offperiod = ((0x10000 - duty) * (period + 1) + 0x8000) >> 16;
}
if (period < offperiod)
{
offperiod = period;
}
pwminfo("Cycle = %d, Low = %d, High = %d, Clock = %d Hz\n",
(prescale) ? (period << prescale) : period + 1,
(prescale) ? (offperiod << prescale) - 1 : offperiod,
(prescale) ? (period << prescale) - (offperiod << prescale) + 1
: period + 1 - offperiod, pwmfreq);
pwminfo("period/off/on = 0x%04x/0x%04x/0x%04x, prescale = %d\n",
period, offperiod, period - offperiod, prescale);
*param = (period & 0xffff) |
((offperiod & 0xffff) << PWM_PARAM_OFFPERIOD_SHIFT);
*phase = prescale << PWM_PHASE_PRESCALE_SHIFT;
return OK;
}
@ -306,7 +350,7 @@ static int pwm_setup(FAR struct pwm_lowerhalf_s *dev)
ret = pwm_pin_config(priv->ch);
if (ret < 0)
{
pwmerr("Failed to pinconf():%d\n", channel);
pwmerr("Failed to pinconf() channel: %d\n", priv->ch);
return -EINVAL;
}
@ -354,6 +398,7 @@ static int pwm_start(FAR struct pwm_lowerhalf_s *dev,
{
FAR struct cxd56_pwm_chan_s *priv = (FAR struct cxd56_pwm_chan_s *)dev;
uint32_t param;
uint32_t phase;
int ret;
if (info->duty <= 0)
@ -371,7 +416,7 @@ static int pwm_start(FAR struct pwm_lowerhalf_s *dev,
}
else
{
ret = convert_freq2period(info->frequency, info->duty, &param);
ret = convert_freq2period(info->frequency, info->duty, &param, &phase);
if (ret < 0)
{
return -EINVAL;
@ -387,10 +432,7 @@ static int pwm_start(FAR struct pwm_lowerhalf_s *dev,
PWM_REG(priv->ch)->EN = 0x0;
PWM_REG(priv->ch)->PARAM = param;
/* Since prescale is not supported, always set to a fixed value '0' */
PWM_PHASE_REG(priv->ch)->PHASE = 0x0;
PWM_PHASE_REG(priv->ch)->PHASE = phase;
PWM_REG(priv->ch)->EN = 0x1;
}
@ -466,6 +508,8 @@ FAR struct pwm_lowerhalf_s *cxd56_pwminitialize(uint32_t channel)
{
FAR struct cxd56_pwm_chan_s *pwmch;
(void)g_pwmops;
switch (channel)
{
#ifdef CONFIG_CXD56_PWM0

View file

@ -208,16 +208,6 @@ static int cxd56_rtc_interrupt(int irq, FAR void *context, FAR void *arg)
id = RTC_ALARM0;
clear = source & RTCREG_ALM0_MASK;
}
else if (source & RTCREG_ALM1_MASK)
{
id = RTC_ALARM1;
clear = source & RTCREG_ALM1_MASK;
}
else if (source & RTCREG_ALM2_MASK)
{
id = RTC_ALARM2;
clear = source & RTCREG_ALM2_MASK;
}
else
{
rtcerr("ERROR: Invalid ALARM\n");
@ -311,10 +301,8 @@ static void cxd56_rtc_initialize(int argc, uint32_t arg, ...)
/* Configure RTC interrupt to catch overflow and alarm interrupts. */
irq_attach(CXD56_IRQ_RTC0_A0, cxd56_rtc_interrupt, NULL);
irq_attach(CXD56_IRQ_RTC0_A2, cxd56_rtc_interrupt, NULL);
irq_attach(CXD56_IRQ_RTC_INT, cxd56_rtc_interrupt, NULL);
up_enable_irq(CXD56_IRQ_RTC0_A0);
up_enable_irq(CXD56_IRQ_RTC0_A2);
up_enable_irq(CXD56_IRQ_RTC_INT);
#endif
@ -332,9 +320,11 @@ static void cxd56_rtc_initialize(int argc, uint32_t arg, ...)
clock_systime_timespec(&ts);
}
/* Synchronize the system time to the RTC time */
#ifdef CONFIG_RTC_HIRES
/* Synchronize the base time to the RTC time */
clock_synchronize();
up_rtc_gettime(&g_basetime);
#endif
if (g_rtc_save->offset == 0)
{

View file

@ -319,12 +319,11 @@ static int cxd56_setalarm(FAR struct rtc_lowerhalf_s *lower,
int ret = -EINVAL;
DEBUGASSERT(lower != NULL && alarminfo != NULL);
DEBUGASSERT((RTC_ALARM0 == alarminfo->id) ||
(RTC_ALARM1 == alarminfo->id));
DEBUGASSERT(RTC_ALARM0 == alarminfo->id);
priv = (FAR struct cxd56_lowerhalf_s *)lower;
if ((RTC_ALARM0 == alarminfo->id) || (RTC_ALARM1 == alarminfo->id))
if (RTC_ALARM0 == alarminfo->id)
{
/* Remember the callback information */
@ -380,9 +379,6 @@ static int cxd56_setrelative(FAR struct rtc_lowerhalf_s *lower,
{
struct lower_setalarm_s setalarm;
FAR struct timespec ts;
struct alm_setalarm_s lowerinfo;
FAR struct cxd56_lowerhalf_s *priv;
FAR struct cxd56_cbinfo_s *cbinfo;
time_t seconds;
int ret = -EINVAL;
@ -390,9 +386,7 @@ static int cxd56_setrelative(FAR struct rtc_lowerhalf_s *lower,
DEBUGASSERT((RTC_ALARM0 <= alarminfo->id) &&
(alarminfo->id < RTC_ALARM_LAST));
if (((alarminfo->id == RTC_ALARM0) ||
(alarminfo->id == RTC_ALARM1)) &&
(alarminfo->reltime > 0))
if ((alarminfo->id == RTC_ALARM0) && (alarminfo->reltime > 0))
{
/* Disable pre-emption while we do this so that we don't have to worry
* about being suspended and working on an old time.
@ -434,36 +428,6 @@ static int cxd56_setrelative(FAR struct rtc_lowerhalf_s *lower,
sched_unlock();
}
else if ((alarminfo->id == RTC_ALARM2) && (alarminfo->reltime > 0))
{
sched_lock();
priv = (FAR struct cxd56_lowerhalf_s *)lower;
/* Remember the callback information */
cbinfo = &priv->cbinfo[alarminfo->id];
cbinfo->cb = alarminfo->cb;
cbinfo->priv = alarminfo->priv;
/* Set the alarm */
lowerinfo.as_id = alarminfo->id;
lowerinfo.as_cb = cxd56_alarm_callback;
lowerinfo.as_arg = priv;
lowerinfo.as_time.tv_sec = alarminfo->reltime;
lowerinfo.as_time.tv_nsec = 0;
ret = cxd56_rtc_setalarm(&lowerinfo);
if (ret < 0)
{
cbinfo->cb = NULL;
cbinfo->priv = NULL;
}
sched_unlock();
}
return ret;
}

View file

@ -69,7 +69,11 @@
/* SCU firmware (iSoP) binary */
#ifdef CONFIG_CXD56_HPADC0_HIGHSPEED
#include "hardware/cxd5602_isop_hadc0_highspeed.h"
#else
#include "hardware/cxd5602_isop.h"
#endif
/****************************************************************************
* Pre-processor Definitions
@ -2006,6 +2010,8 @@ static int seq_fifoinit(FAR struct seq_s *seq, int fifoid, uint16_t fsize)
/* Initialize DMA done wait semaphore */
nxsem_init(&fifo->dmawait, 0, 0);
nxsem_set_protocol(&fifo->dmawait, SEM_PRIO_NONE);
fifo->dmaresult = -1;
#endif
@ -2748,14 +2754,36 @@ FAR struct seq_s *seq_open(int type, int bustype)
{
FAR struct seq_s *seq;
/* Check bustype is valid */
switch (bustype)
{
case SCU_BUS_SPI:
case SCU_BUS_I2C0:
case SCU_BUS_I2C1:
case SCU_BUS_LPADC0:
case SCU_BUS_LPADC1:
case SCU_BUS_LPADC2:
case SCU_BUS_LPADC3:
case SCU_BUS_HPADC0:
case SCU_BUS_HPADC1:
break;
default:
return NULL;
}
if (type == SEQ_TYPE_DECI)
{
seq = deci_new();
}
else
else if (type == SEQ_TYPE_NORMAL)
{
seq = seq_new();
}
else
{
return NULL;
}
if (!seq)
{
@ -3446,12 +3474,14 @@ void scu_initialize(void)
memset(priv, 0, sizeof(struct cxd56_scudev_s));
nxsem_init(&priv->syncwait, 0, 0);
nxsem_init(&priv->syncexc, 0, 1);
nxsem_init(&priv->syncwait, 0, 0);
nxsem_set_protocol(&priv->syncwait, SEM_PRIO_NONE);
for (i = 0; i < 3; i++)
{
nxsem_init(&priv->oneshotwait[i], 0, 0);
nxsem_set_protocol(&priv->oneshotwait[i], SEM_PRIO_NONE);
}
scufifo_initialize();

File diff suppressed because it is too large Load diff

View file

@ -496,6 +496,19 @@ void cxd56_sdhci_mediachange(FAR struct sdio_dev_s *dev);
void cxd56_sdhci_wrprotect(FAR struct sdio_dev_s *dev, bool wrprotect);
/****************************************************************************
* Name: cxd56_sdio_resetstatus
*
* Description:
* Reset SDIO status.
*
* Input Parameters:
* dev - Device-specific state data
*
****************************************************************************/
void cxd56_sdio_resetstatus(FAR struct sdio_dev_s *dev);
#undef EXTERN
#ifdef __cplusplus
}

View file

@ -65,6 +65,7 @@
#include "cxd56_config.h"
#include "cxd56_serial.h"
#include "cxd56_powermgr.h"
/****************************************************************************
* Pre-processor definitions
@ -89,8 +90,14 @@ struct up_dev_s
uint8_t id; /* ID=0,1,2,3 */
uint8_t irq; /* IRQ associated with this UART */
uint8_t parity; /* 0=none, 1=odd, 2=even */
uint8_t bits; /* Number of bits (7 or 8) */
uint8_t bits; /* Number of bits (5,6,7 or 8) */
bool stopbits2; /* true: Configure with 2 stop bits instead of 1 */
#ifdef CONFIG_SERIAL_IFLOWCONTROL
bool iflow; /* input flow control (RTS) enabled */
#endif
#ifdef CONFIG_SERIAL_OFLOWCONTROL
bool oflow; /* output flow control (CTS) enabled */
#endif
#ifdef HAVE_RS485
bool dtrdir; /* DTR pin is the direction bit */
#endif
@ -101,6 +108,9 @@ struct up_dev_s
* Private Function Prototypes
****************************************************************************/
#ifndef CONFIG_SUPPRESS_UART_CONFIG
static void up_set_format(struct uart_dev_s *dev);
#endif
static int up_setup(FAR struct uart_dev_s *dev);
static void up_shutdown(FAR struct uart_dev_s *dev);
static int up_attach(FAR struct uart_dev_s *dev);
@ -187,6 +197,12 @@ static struct up_dev_s g_uart1priv =
.parity = CONFIG_UART1_PARITY,
.bits = CONFIG_UART1_BITS,
.stopbits2 = CONFIG_UART1_2STOP,
#ifdef CONFIG_SERIAL_IFLOWCONTROL
.iflow = false, /* flow control is not supported */
#endif
#ifdef CONFIG_SERIAL_OFLOWCONTROL
.oflow = false, /* flow control is not supported */
#endif
};
static uart_dev_t g_uart1port =
@ -220,6 +236,12 @@ static struct up_dev_s g_uart2priv =
.parity = CONFIG_UART2_PARITY,
.bits = CONFIG_UART2_BITS,
.stopbits2 = CONFIG_UART2_2STOP,
#if defined(CONFIG_SERIAL_IFLOWCONTROL) && defined(CONFIG_UART2_IFLOWCONTROL)
.iflow = true,
#endif
#if defined(CONFIG_SERIAL_OFLOWCONTROL) && defined(CONFIG_UART2_OFLOWCONTROL)
.oflow = true,
#endif
};
static uart_dev_t g_uart2port =
@ -327,6 +349,116 @@ static inline void up_enablebreaks(FAR struct up_dev_s *priv, bool enable)
up_serialout(priv, CXD56_UART_LCR_H, lcr);
}
/****************************************************************************
* Name: cxd56_serial2_pm_event
****************************************************************************/
#ifdef CONFIG_CXD56_UART2
static int cxd56_serial2_pm_event(uint8_t id)
{
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)&g_uart2priv;
switch (id)
{
case CXD56_PM_CALLBACK_ID_CLK_CHG_START:
break;
case CXD56_PM_CALLBACK_ID_CLK_CHG_END:
cxd56_setbaud(priv->uartbase, priv->basefreq, priv->baud);
break;
default:
break;
}
return 0;
}
#endif
/****************************************************************************
* Name: up_set_format
*
* Description:
* Set the serial line format and speed.
*
****************************************************************************/
#ifndef CONFIG_SUPPRESS_UART_CONFIG
static void up_set_format(struct uart_dev_s *dev)
{
FAR struct up_dev_s *priv = (FAR struct up_dev_s *)dev->priv;
uint32_t lcr;
uint32_t cr;
uint32_t cr_en;
irqstate_t flags;
flags = enter_critical_section();
/* Get the original state of control register */
cr = up_serialin(priv, CXD56_UART_CR);
cr_en = cr & UART_CR_EN;
cr &= ~UART_CR_EN;
/* Disable until the format bits and baud rate registers are updated */
up_serialout(priv, CXD56_UART_CR, cr);
/* Set the BAUD divisor */
cxd56_setbaud(priv->uartbase, priv->basefreq, priv->baud);
/* Set up the LCR */
lcr = up_serialin(priv, CXD56_UART_LCR_H);
lcr &= ~(UART_LCR_WLEN(8) | UART_LCR_STP2 | UART_LCR_EPS | UART_LCR_PEN);
if ((5 <= priv->bits) && (priv->bits < 8))
{
lcr |= UART_LCR_WLEN(priv->bits);
}
else
{
lcr |= UART_LCR_WLEN(8);
}
if (priv->stopbits2)
{
lcr |= UART_LCR_STP2;
}
if (priv->parity == 1)
{
lcr |= (UART_LCR_PEN);
}
else if (priv->parity == 2)
{
lcr |= (UART_LCR_PEN | UART_LCR_EPS);
}
up_serialout(priv, CXD56_UART_LCR_H, lcr);
/* Enable Auto-RTS and Auto-CS Flow Control in the Modem Control Register */
cr &= ~(UART_CR_RTSEN | UART_CR_CTSEN);
cr |= UART_CR_RTS;
#ifdef CONFIG_SERIAL_IFLOWCONTROL
if ((priv->iflow) && (priv->uartbase == CXD56_UART2_BASE))
{
cr |= UART_CR_RTSEN;
}
#endif
#ifdef CONFIG_SERIAL_OFLOWCONTROL
if ((priv->oflow) && (priv->uartbase == CXD56_UART2_BASE))
{
cr |= UART_CR_CTSEN;
}
#endif
up_serialout(priv, CXD56_UART_CR, cr | cr_en);
leave_critical_section(flags);
}
#endif /* CONFIG_SUPPRESS_UART_CONFIG */
/****************************************************************************
* Name: up_setup
*
@ -356,78 +488,37 @@ static int up_setup(FAR struct uart_dev_s *dev)
priv->ier = up_serialin(priv, CXD56_UART_IMSC);
/* Set the BAUD divisor */
/* Configure the UART line format and speed. */
cxd56_setbaud(priv->uartbase, priv->basefreq, priv->baud);
up_set_format(dev);
/* Set up the LCR */
lcr = 0;
if (priv->bits == 7)
{
lcr |= UART_LCR_WLEN(7);
}
else
{
lcr |= UART_LCR_WLEN(8);
}
if (priv->stopbits2)
{
lcr |= UART_LCR_STP2;
}
if (priv->parity == 1)
{
lcr |= (UART_LCR_PEN);
}
else if (priv->parity == 2)
{
lcr |= (UART_LCR_PEN | UART_LCR_EPS);
}
/* Save the LCR */
up_serialout(priv, CXD56_UART_LCR_H, lcr);
/* Set interrupt FIFO level */
up_serialout(priv, CXD56_UART_IFLS, 0);
/* Clear all interrupts */
up_serialout(priv, CXD56_UART_ICR, 0x7ff);
cr = UART_CR_RXE | UART_CR_TXE;
/* Enable Auto-RTS and Auto-CS Flow Control in the Modem Control Register */
# ifdef CONFIG_UART1_FLOWCONTROL
if (priv->uartbase == CXD56_UART1_BASE)
{
cr |= UART_CR_CTSEN | UART_CR_RTSEN;
}
# endif
/* Enable Auto-RTS and Auto-CS Flow Control in UART2 */
# ifdef CONFIG_UART2_IFLOWCONTROL
if (priv->uartbase == CXD56_UART2_BASE)
{
cr |= UART_CR_RTSEN;
}
# endif
# ifdef CONFIG_UART2_OFLOWCONTROL
if (priv->uartbase == CXD56_UART2_BASE)
{
cr |= UART_CR_CTSEN;
}
# endif
up_serialout(priv, CXD56_UART_CR, cr);
/* Enable FIFO and UART in the last */
lcr = up_serialin(priv, CXD56_UART_LCR_H);
lcr |= UART_LCR_FEN;
up_serialout(priv, CXD56_UART_LCR_H, lcr);
cr |= UART_CR_EN;
cr = up_serialin(priv, CXD56_UART_CR);
cr |= UART_CR_RXE | UART_CR_TXE | UART_CR_EN;
up_serialout(priv, CXD56_UART_CR, cr);
#endif
#if defined(CONFIG_CXD56_UART2) && !defined(CONFIG_UART2_SERIAL_CONSOLE)
if ((!priv->pmhandle) && (priv->uartbase == CXD56_UART2_BASE))
{
priv->pmhandle = cxd56_pm_register_callback(PM_CLOCK_APP_UART,
cxd56_serial2_pm_event);
}
#endif
return OK;
}
@ -460,6 +551,14 @@ static void up_shutdown(FAR struct uart_dev_s *dev)
default:
break;
}
#ifndef CONFIG_UART2_SERIAL_CONSOLE
if ((priv->pmhandle) && (priv->uartbase == CXD56_UART2_BASE))
{
cxd56_pm_unregister_callback(priv->pmhandle);
priv->pmhandle = NULL;
}
#endif
}
/****************************************************************************
@ -669,6 +768,7 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
case TCGETS:
{
FAR struct termios *termiosp = (FAR struct termios *)arg;
irqstate_t flags;
if (!termiosp)
{
@ -676,18 +776,48 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
break;
}
/* TODO: Other termios fields are not yet returned.
* Note that only cfsetospeed is not necessary because we have
* knowledge that only one speed is supported.
*/
flags = enter_critical_section();
cfsetispeed(termiosp, priv->baud);
termiosp->c_cflag = ((priv->parity != 0) ? PARENB : 0) |
((priv->parity == 1) ? PARODD : 0) |
#ifdef CONFIG_SERIAL_OFLOWCONTROL
((priv->oflow) ? CCTS_OFLOW : 0) |
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
((priv->iflow) ? CRTS_IFLOW : 0) |
#endif
((priv->stopbits2) ? CSTOPB : 0);
switch (priv->bits)
{
case 5:
termiosp->c_cflag |= CS5;
break;
case 6:
termiosp->c_cflag |= CS6;
break;
case 7:
termiosp->c_cflag |= CS7;
break;
case 8:
default:
termiosp->c_cflag |= CS8;
break;
}
leave_critical_section(flags);
}
break;
case TCSETS:
{
FAR struct termios *termiosp = (FAR struct termios *)arg;
irqstate_t flags;
if (!termiosp)
{
@ -695,13 +825,52 @@ static int up_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
break;
}
/* TODO: Handle other termios settings.
* Note that only cfgetispeed is used besued we have knowledge
* that only one speed is supported.
*/
flags = enter_critical_section();
switch (termiosp->c_cflag & CSIZE)
{
case CS5:
priv->bits = 5;
break;
case CS6:
priv->bits = 6;
break;
case CS7:
priv->bits = 7;
break;
case CS8:
default:
priv->bits = 8;
break;
}
if ((termiosp->c_cflag & PARENB) != 0)
{
priv->parity = (termiosp->c_cflag & PARODD) ? 1 : 2;
}
else
{
priv->parity = 0;
}
priv->stopbits2 = (termiosp->c_cflag & CSTOPB) != 0;
#ifdef CONFIG_SERIAL_OFLOWCONTROL
priv->oflow = (termiosp->c_cflag & CCTS_OFLOW) != 0;
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
priv->iflow = (termiosp->c_cflag & CRTS_IFLOW) != 0;
#endif
priv->baud = cfgetispeed(termiosp);
cxd56_setbaud(priv->uartbase, priv->basefreq, priv->baud);
/* Configure the UART line format and speed. */
up_set_format(dev);
leave_critical_section(flags);
}
break;
#endif

View file

@ -48,10 +48,10 @@
/* Prototypes for Remote API */
int FM_RawWrite(uint32_t offset, const void *buf, uint32_t size);
int FM_RawVerifyWrite(uint32_t offset, const void *buf, uint32_t size);
int FM_RawRead(uint32_t offset, void *buf, uint32_t size);
int FM_RawEraseSector(uint32_t sector);
int fw_fm_rawwrite(uint32_t offset, const void *buf, uint32_t size);
int fw_fm_rawverifywrite(uint32_t offset, const void *buf, uint32_t size);
int fw_fm_rawread(uint32_t offset, void *buf, uint32_t size);
int fw_fm_rawerasesector(uint32_t sector);
/****************************************************************************
* Pre-processor Definitions
@ -99,7 +99,7 @@ static int cxd56_erase(FAR struct mtd_dev_s *dev, off_t startblock,
for (i = 0; i < nblocks; i++)
{
ret = FM_RawEraseSector(startblock + i);
ret = fw_fm_rawerasesector(startblock + i);
if (ret < 0)
{
set_errno(-ret);
@ -117,7 +117,8 @@ static ssize_t cxd56_bread(FAR struct mtd_dev_s *dev, off_t startblock,
finfo("bread: %08lx (%u blocks)\n", startblock << PAGE_SHIFT, nblocks);
ret = FM_RawRead(startblock << PAGE_SHIFT, buffer, nblocks << PAGE_SHIFT);
ret = fw_fm_rawread(startblock << PAGE_SHIFT, buffer,
nblocks << PAGE_SHIFT);
if (ret < 0)
{
set_errno(-ret);
@ -135,10 +136,10 @@ static ssize_t cxd56_bwrite(FAR struct mtd_dev_s *dev, off_t startblock,
finfo("bwrite: %08lx (%u blocks)\n", startblock << PAGE_SHIFT, nblocks);
#ifdef CONFIG_CXD56_SFC_VERIFY_WRITE
ret = FM_RawVerifyWrite(startblock << PAGE_SHIFT, buffer,
ret = fw_fm_rawverifywrite(startblock << PAGE_SHIFT, buffer,
nblocks << PAGE_SHIFT);
#else
ret = FM_RawWrite(startblock << PAGE_SHIFT, buffer,
ret = fw_fm_rawwrite(startblock << PAGE_SHIFT, buffer,
nblocks << PAGE_SHIFT);
#endif
if (ret < 0)
@ -157,7 +158,7 @@ static ssize_t cxd56_read(FAR struct mtd_dev_s *dev, off_t offset,
finfo("read: %08lx (%u bytes)\n", offset, nbytes);
ret = FM_RawRead(offset, buffer, nbytes);
ret = fw_fm_rawread(offset, buffer, nbytes);
if (ret < 0)
{
set_errno(-ret);
@ -176,9 +177,9 @@ static ssize_t cxd56_write(FAR struct mtd_dev_s *dev, off_t offset,
finfo("write: %08lx (%u bytes)\n", offset, nbytes);
#ifdef CONFIG_CXD56_SFC_VERIFY_WRITE
ret = FM_RawVerifyWrite(offset, buffer, nbytes);
ret = fw_fm_rawverifywrite(offset, buffer, nbytes);
#else
ret = FM_RawWrite(offset, buffer, nbytes);
ret = fw_fm_rawwrite(offset, buffer, nbytes);
#endif
if (ret < 0)
{
@ -236,7 +237,7 @@ static int cxd56_ioctl(FAR struct mtd_dev_s *dev, int cmd, unsigned long arg)
while (sec < last)
{
FM_RawEraseSector(sec);
fw_fm_rawerasesector(sec);
sec++;
}
}

View file

@ -261,6 +261,7 @@ static inline int cxd56_sphdevinit(FAR const char *devname, int num)
}
nxsem_init(&priv->wait, 0, 0);
nxsem_set_protocol(&priv->wait, SEM_PRIO_NONE);
priv->id = num;
irq_attach(CXD56_IRQ_SPH0 + num, cxd56_sphirqhandler, NULL);

View file

@ -1316,6 +1316,7 @@ void cxd56_spi_dmaconfig(int port, int chtype, DMA_HANDLE handle,
if (!priv->dmaenable)
{
nxsem_init(&priv->dmasem, 0, 0);
nxsem_set_protocol(&priv->dmasem, SEM_PRIO_NONE);
priv->dmaenable = true;
}
}
@ -1329,6 +1330,7 @@ void cxd56_spi_dmaconfig(int port, int chtype, DMA_HANDLE handle,
if (!priv->dmaenable)
{
nxsem_init(&priv->dmasem, 0, 0);
nxsem_set_protocol(&priv->dmasem, SEM_PRIO_NONE);
priv->dmaenable = true;
}
}
@ -1420,7 +1422,6 @@ static void spi_dmaexchange(FAR struct spi_dev_s *dev,
uint32_t regval = 0;
DEBUGASSERT(priv && priv->spibase);
DEBUGASSERT(txbuffer || rxbuffer);
/* Disable clock gating (clock enable) */
@ -1593,12 +1594,12 @@ static void spi_dmatrxwait(FAR struct cxd56_spidev_s *priv)
{
uint32_t val;
if (nxsem_wait(&priv->dmasem) != OK)
if (nxsem_wait_uninterruptible(&priv->dmasem) != OK)
{
spierr("dma error\n");
}
if (nxsem_wait(&priv->dmasem) != OK)
if (nxsem_wait_uninterruptible(&priv->dmasem) != OK)
{
spierr("dma error\n");
}

View file

@ -275,10 +275,14 @@ void fpuconfig(void)
* This is the reset entry point.
*
****************************************************************************/
#define CPU_ID (CXD56_CPU_BASE + 0x40)
void __start(void)
{
uint32_t *dest;
#ifndef CONFIG_CXD56_SUBCORE
uint32_t cpuid;
#endif
/* Set MSP/PSP to IDLE stack */
@ -289,6 +293,17 @@ void __start(void)
: "r" ((uint32_t)&_ebss +
CONFIG_IDLETHREAD_STACKSIZE - 4));
#ifndef CONFIG_CXD56_SUBCORE
cpuid = getreg32(CPU_ID);
if (cpuid != 2)
{
for (; ; )
{
__asm__ __volatile__("wfi\n");
}
}
#endif
up_irq_disable();
if (*((uint32_t *)CXD56_BOOT_ENTRY_POINT))

View file

@ -193,6 +193,7 @@ void cxd56_sysctlinitialize(void)
nxsem_init(&g_exc, 0, 1);
nxsem_init(&g_sync, 0, 0);
nxsem_set_protocol(&g_sync, SEM_PRIO_NONE);
cxd56_iccregisterhandler(CXD56_PROTO_SYSCTL, sysctl_rxhandler, NULL);

View file

@ -366,7 +366,7 @@ static int cxd56_getstatus(FAR struct timer_lowerhalf_s *lower,
* Input Parameters:
* lower - A pointer the publicly visible representation of the "lower
* half" driver state structure.
* timeout - The new timeout value in milliseconds.
* timeout - The new timeout value in microseconds.
*
* Returned Values:
* Zero on success; a negated errno value on failure.

View file

@ -48,6 +48,7 @@
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <fcntl.h>
#include <debug.h>
#include <errno.h>
@ -94,14 +95,14 @@ static void uart0_semgive(sem_t *id);
* FarAPI prototypes
****************************************************************************/
int PD_UartInit(int ch);
int PD_UartUninit(int ch);
int PD_UartConfiguration(int ch, int baudrate, int databits,
int fw_pd_uartinit(int ch);
int fw_pd_uartuninit(int ch);
int fw_pd_uartconfiguration(int ch, int baudrate, int databits,
int parity, int stopbit, int flowctrl);
int PD_UartEnable(int ch);
int PD_UartDisable(int ch);
int PD_UartReceive(int ch, void *buf, int size, int leave);
int PD_UartSend(int ch, void *buf, int size, int leave);
int fw_pd_uartenable(int ch);
int fw_pd_uartdisable(int ch);
int fw_pd_uartreceive(int ch, void *buf, int size, int leave);
int fw_pd_uartsend(int ch, void *buf, int size, int leave);
/****************************************************************************
* Private Data
@ -158,7 +159,7 @@ static int uart0_open(FAR struct file *filep)
return OK;
}
ret = PD_UartInit(0);
ret = fw_pd_uartinit(0);
if (ret < 0)
{
set_errno(EFAULT);
@ -175,7 +176,7 @@ static int uart0_open(FAR struct file *filep)
/* Enable UART0 pin configuration */
#ifdef CONFIG_UART0_FLOWCONTROL
#ifdef CONFIG_CXD56_UART0_FLOWCONTROL
flowctl = 1;
CXD56_PIN_CONFIGS(PINCONFS_SPI2_UART0);
#else
@ -183,21 +184,21 @@ static int uart0_open(FAR struct file *filep)
CXD56_PIN_CONFIGS(PINCONFS_SPI2A_UART0);
#endif
ret = PD_UartConfiguration(0, CONFIG_CXD56_UART0_BAUD,
ret = fw_pd_uartconfiguration(0, CONFIG_CXD56_UART0_BAUD,
bits,
CONFIG_CXD56_UART0_PARITY,
stop, flowctl);
if (ret < 0)
{
PD_UartUninit(0);
fw_pd_uartuninit(0);
set_errno(EINVAL);
return ERROR;
}
ret = PD_UartEnable(0);
ret = fw_pd_uartenable(0);
if (ret < 0)
{
PD_UartUninit(0);
fw_pd_uartuninit(0);
set_errno(EFAULT);
return ERROR;
}
@ -215,12 +216,12 @@ static int uart0_close(FAR struct file *filep)
if (inode->i_crefs == 1)
{
PD_UartDisable(0);
PD_UartUninit(0);
fw_pd_uartdisable(0);
fw_pd_uartuninit(0);
/* Disable UART0 pin by changing Hi-Z GPIO */
#ifdef CONFIG_UART0_FLOWCONTROL
#ifdef CONFIG_CXD56_UART0_FLOWCONTROL
CXD56_PIN_CONFIGS(PINCONFS_SPI2_GPIO);
#else
CXD56_PIN_CONFIGS(PINCONFS_SPI2A_GPIO);
@ -241,9 +242,8 @@ static ssize_t uart0_read(FAR struct file *filep,
uart0_semtake(&g_lock);
/* Always blocking */
ret = PD_UartReceive(0, buffer, len, 0);
ret = fw_pd_uartreceive(0, buffer, len,
((filep->f_oflags & O_NONBLOCK) != 0));
uart0_semgive(&g_lock);
@ -267,9 +267,8 @@ static ssize_t uart0_write(FAR struct file *filep,
uart0_semtake(&g_lock);
/* Always blocking */
ret = PD_UartSend(0, (FAR void *)buffer, len, 0);
ret = fw_pd_uartsend(0, (FAR void *)buffer, len,
((filep->f_oflags & O_NONBLOCK) != 0));
uart0_semgive(&g_lock);

View file

@ -60,7 +60,9 @@ typedef struct
uint32_t chip_revision; /* 0x04400004 ~ 0x04400007 */
uint32_t sbl_version; /* 0x04400008 ~ 0x0440000b */
uint32_t sysfw_version; /* 0x0440000c ~ 0x0440000f */
uint32_t reserved_version[4]; /* 0x04400010 ~ 0x0440001f */
uint32_t gnssfw_version; /* 0x04400010 ~ 0x04400013 */
uint32_t reserved_version[2]; /* 0x04400014 ~ 0x0440001b */
uint32_t fw_free_space; /* 0x0440001c ~ 0x0440001f */
uint32_t bootcause; /* 0x04400020 ~ 0x04400023 */
uint32_t bootmask; /* 0x04400024 ~ 0x04400027 */
uint32_t bootreserve; /* 0x04400028 ~ 0x0440002b */

View file

@ -0,0 +1,278 @@
/* This file is generated at Mar 27 2020 12:00:17 */
/****************************************************************************
* Public Data
****************************************************************************/
const unsigned long scu_isopprog_array[] =
{
0xf7f8d600, 0xa2024f86, 0x0001a200, 0x18004081,
0x00008014, 0x00000000, 0x0000a207, 0x00000000,
0x0000a070, 0xac2d4ec6, 0xd000ac27, 0x50a2e444,
0x70111801, 0x50011c01, 0xf350d000, 0x0004800a,
0x40110114, 0x50031f43, 0x9ff42801, 0x90062911,
0x8fec5043, 0x00140003, 0x40640113, 0x1f344011,
0x9fe42121, 0xd2005001, 0x5203f35a, 0x50155004,
0x04150845, 0x90082905, 0x2d444014, 0x00259ff2,
0x40110115, 0x21311f54, 0xd1009fe4, 0x5ff2e824,
0xe808d400, 0x01f8fc43, 0x07fffc33, 0xe804d000,
0xf000d700, 0x1c431c12, 0xe800d100, 0x1c025013,
0x0103fc40, 0x0300fc30, 0xf3dcd200, 0x1c135be4,
0xe418d100, 0x1c105003, 0xf47250a1, 0x1c230300,
0x0004f721, 0xf7235e61, 0xf7230005, 0xf7230016,
0x00250017, 0x4fc10215, 0xf7531d53, 0xf753fffe,
0x2141ffff, 0xd1009fee, 0xd209f340, 0xd000ec00,
0x5004f4bc, 0x1c125005, 0x0304f470, 0x44020002,
0x0308f472, 0x41a10001, 0x00020053, 0x106350a7,
0x1c240132, 0x0004f727, 0x0005f724, 0x0016f724,
0x0017f724, 0x1d340013, 0xfffef734, 0xfffff734,
0x40434ff7, 0x9ff02907, 0x44014015, 0x9fca2925,
0xd3005001, 0x5004f344, 0xf39cd200, 0x01150035,
0x1f544011, 0x9ff62941, 0xd4005fe3, 0x5005f348,
0x00415f67, 0x4fc30231, 0xfffef512, 0x1f154202,
0x9ff02173, 0xf334d200, 0xf000d100, 0xd4005003,
0x5005f53c, 0x030cf412, 0xac115001, 0xa819ac19,
0x00470052, 0x00710112, 0x01211032, 0x00201c13,
0x70407052, 0x1f450104, 0x00740070, 0xf350d700,
0x01200157, 0x1e724015, 0xf7131f02, 0xa8110016,
0x210550a0, 0x9fc44021, 0xf37ad000, 0x1000fc11,
0x00345f02, 0x4ff30005, 0x21231014, 0x1d510245,
0x50029ff2, 0xf334d000, 0xf000d700, 0xf45cd300,
0x1d025004, 0xf332d000, 0x0310f470, 0x00350041,
0x01151041, 0x0004f452, 0x0008f454, 0xf7524014,
0xf752000c, 0x1c52000d, 0x9fe22964, 0xd2005001,
0xfc43f330, 0xfc332020, 0x1f210327, 0x0001f721,
0x5834d211, 0xf5711d01, 0xf77102fe, 0x1c7302fc,
0xe412d000, 0x0004f472, 0xf4715012, 0x1f020008,
0x0d66fa00, 0xa82da827, 0x41465000, 0x0000a070,
0xac3d4e46, 0xf601ac37, 0x28010005, 0xf6029178,
0xac200004, 0x10110021, 0xd100ac29, 0xa828f53c,
0x10300120, 0x7050ac18, 0x1e150101, 0xfa000050,
0x00500ddc, 0x29006fb0, 0x0050901a, 0xfa004010,
0x00500dcc, 0xfa004020, 0x00500dc4, 0xfa004030,
0xd1000dbc, 0x5010e000, 0x08501811, 0x28010401,
0xac15906c, 0x0128fa00, 0x5003a822, 0xf6205005,
0xa8110004, 0xfa004062, 0xa8230290, 0xf53cd400,
0x91022900, 0x5021a818, 0xf334d700, 0x1c410104,
0xf6305011, 0x1a720004, 0x05120801, 0xf6301d72,
0xf7400005, 0x28000016, 0x500090dc, 0x00320041,
0x01524010, 0xf6220151, 0xf7120006, 0x00050006,
0x0005f632, 0x24256ff5, 0x80ba9fe4, 0xd100a822,
0xf620e404, 0x18110004, 0x28016201, 0xd3009028,
0x6ff0f330, 0x0001f631, 0x90222101, 0x6ff01e30,
0x901a2910, 0x0ccefa00, 0x5030a822, 0xf330d100,
0x800a1f10, 0xf330d000, 0x1f015001, 0x0004f620,
0xf000d100, 0x01011050, 0x0005f620, 0x0024f213,
0xac1b2800, 0x0024f211, 0x905a0050, 0xac100015,
0x03b2fa00, 0x0053a814, 0x904a2910, 0x60f31243,
0x61f34013, 0x903e2803, 0x5002a818, 0x60f05001,
0x0030ac18, 0x00470043, 0xf41cd400, 0x10234011,
0xf2430134, 0x1a440002, 0x0152a81d, 0x0125a825,
0x0006f652, 0x00741f42, 0x00031f32, 0x6ff20012,
0x9fd02432, 0xa83da837, 0xa07041c6, 0xac4d4dc6,
0xd000ac47, 0xfc41e400, 0x18000400, 0x28000410,
0x5000915e, 0xf33cd100, 0x0e10ac18, 0xfc41ac10,
0xd0000400, 0xac21e804, 0xd1001c01, 0x1810e080,
0xe084d100, 0x00021811, 0xf76260f2, 0x00620018,
0x0018fc02, 0x00040023, 0x13007022, 0x70131284,
0x1f346034, 0xf5611d20, 0x1301001c, 0xe088d000,
0xf5615012, 0x1c02001e, 0x0018f265, 0x6ff5ac2d,
0xfa000050, 0xa82f02e0, 0xd100a812, 0x2910f41c,
0x10259086, 0xf000d000, 0x12870013, 0x0100fc41,
0x40170150, 0x0280f000, 0x04106ff7, 0x29005001,
0x50009032, 0x28070023, 0x0062905e, 0x40101011,
0x0018fc02, 0x0018f664, 0xf2210112, 0x10240002,
0x2000fc34, 0x1d311d41, 0x6ff10001, 0x9fdc2471,
0x50008036, 0x28070035, 0xf662902e, 0x00530018,
0x40101011, 0x01231022, 0x0002f232, 0x00641a33,
0x0018fc04, 0xf6410114, 0x1f310003, 0x00011f21,
0x24716ff1, 0xd0009fd6, 0x1800e400, 0x0410a821,
0x900c2800, 0x4010a818, 0x2c40ac18, 0xf6619f02,
0x50000018, 0x90142c41, 0x4fc00010, 0x90062e30,
0x80085010, 0x00fafc01, 0xd1000010, 0x1811e404,
0x28016201, 0xd5009022, 0x6ff0f330, 0x0001f651,
0x901c2101, 0x6ff01e50, 0x90142910, 0x0ad6fa00,
0x1f505030, 0xd000800a, 0x5001f330, 0xa8471f01,
0x4246a84d, 0x4e06a070, 0xac3fac45, 0xe400d300,
0xfc431834, 0x04340200, 0x90322804, 0xd400ac21,
0x1841e404, 0x28016201, 0xd1009032, 0xf614f330,
0x21040001, 0x1e11902e, 0x29316ff1, 0xd0009026,
0xf001f000, 0x701102c8, 0x02c8f401, 0xe808d000,
0x05311801, 0x50001c01, 0xd1008108, 0x5003f330,
0x10501f13, 0xf000d100, 0xe808d300, 0xfdfffc45,
0xfffffc35, 0x01015007, 0xf210ac19, 0x18340026,
0xfc450454, 0x12c00200, 0xd3001c34, 0x1c35e804,
0x0026f213, 0xf214ac10, 0xf2100026, 0xf2150026,
0x12830026, 0x124512c4, 0x601060f3, 0x01326034,
0x28006075, 0x902a4014, 0x00615003, 0x40131017,
0x0014fc01, 0x01711e20, 0x0001f627, 0x10804022,
0x08500570, 0x00371d10, 0x24476ff7, 0x80289fde,
0x00605003, 0x40131017, 0x0014fc00, 0x01701e21,
0x0001f627, 0x10874022, 0x08570517, 0x00371d07,
0x24476ff7, 0xa8119fde, 0xf262a820, 0xd3000014,
0x1081e004, 0xfc211102, 0x05010300, 0xd2000521,
0x1c31e008, 0xfc000060, 0xf2610014, 0x70200018,
0x11011a00, 0x1c210501, 0xe00cd100, 0xf020a81a,
0x1c100028, 0xe010d100, 0x002cf020, 0xd1001c10,
0xf020e014, 0x1c100030, 0xd1005010, 0x1c10e018,
0xa845a83f, 0xa0704206, 0xac354e86, 0xa83dac2f,
0x0002ac1a, 0x2805ac12, 0xac21901e, 0x1801a820,
0xa81a0020, 0x001cfa00, 0xa821a812, 0x4ff5a818,
0x40412905, 0xa82f9fe6, 0x5010a835, 0xa0704186,
0xac2d4ec6, 0xac12ac27, 0x0005ac19, 0x0036fa00,
0x90282910, 0x1025a810, 0x90102800, 0xf41cd000,
0x1a000150, 0x1c01a819, 0xa8198012, 0xf33cd000,
0x2000fc35, 0x1d510e00, 0xa8271d01, 0x4146a82d,
0xd200a070, 0x0001f000, 0x00231020, 0x50100103,
0x0280f033, 0x28036033, 0x29239078, 0x0014904c,
0xd3001021, 0x0112f37a, 0xf0211014, 0x01430280,
0x12415094, 0x40a16031, 0x081460f1, 0xe404d100,
0x04141811, 0x904c2804, 0x50001a31, 0x90422801,
0x1000fc10, 0x90442101, 0x0280f020, 0xfc201280,
0x1d300fff, 0xa0705010, 0x90242913, 0x01121021,
0xf0205091, 0xd2000280, 0x1240e404, 0x40a06030,
0x080160f0, 0x04011820, 0xa3002901, 0x5000a070,
0xfc11a070, 0x1d311000, 0x4ff1a070, 0x1d315010,
0x4e46a070, 0xac37ac3d, 0x18450004, 0x901e2905,
0xe404d000, 0x18032801, 0xd0000017, 0x90a0e410,
0x60431802, 0x90b42803, 0x809e7042, 0x93322915,
0xf6410017, 0x6ff10004, 0x00400012, 0x01201022,
0x0019f602, 0x0018f603, 0x90262123, 0xd2001051,
0x0112f000, 0x0020f021, 0x0020f022, 0x13821301,
0x61f267f1, 0x0018f701, 0x40110121, 0x0019f701,
0xd200ac17, 0x5041e444, 0x18232807, 0xd7000871,
0x0513f000, 0xd800d100, 0xd3001c23, 0xa432d400,
0x0023a512, 0x0004f641, 0x00740045, 0x105176c3,
0xf0410114, 0x50040020, 0x00141c34, 0x0400fc24,
0x902e2804, 0x03fffc21, 0x1000fc31, 0x18028026,
0x28036023, 0x70229110, 0xd0001c02, 0xfc11e804,
0x1c010400, 0xf8005000, 0x5fb10524, 0x80faac24,
0x704267f1, 0x50121c21, 0x1c325001, 0xd410d200,
0x0018f604, 0xf754ac25, 0xf7510017, 0x00030005,
0xd810d100, 0xa810ac1b, 0x00302800, 0xf601a512,
0x6ff10019, 0x0041ac29, 0x6ff1a82b, 0x915a2513,
0x10114014, 0x0018f704, 0x01140074, 0x0160f247,
0x0160f245, 0x607512c5, 0xf2430051, 0x40110160,
0x0100fc23, 0x90102803, 0xf603a820, 0x01130005,
0x0005f703, 0xfc04a818, 0x0e530160, 0x90082903,
0x07fffc27, 0x00738026, 0xfc232821, 0x1c2305ff,
0x28159016, 0x00719012, 0xfc214ff5, 0x4ff501ff,
0x29051c21, 0xfc279ffa, 0x1c2703ff, 0xf000d700,
0xf6041a41, 0xfc210018, 0x28010800, 0xf6019f7a,
0x25410019, 0x101490d4, 0xc000d200, 0xf2710147,
0xfc210160, 0x2121e000, 0xfc0790ba, 0x1a710160,
0x40116ff1, 0x001af501, 0x0018f601, 0xf7014011,
0x80a60018, 0x5fd1ac24, 0xd1000412, 0x1c02e400,
0x18115000, 0x03fffc21, 0xf9002801, 0x50a20410,
0x51432807, 0xf000d500, 0xa534a424, 0x000cf053,
0xd4000943, 0x0413f35a, 0x00450031, 0x011561f1,
0x29511e51, 0x1253900a, 0x1e410134, 0x20214051,
0x5013903c, 0xe804d400, 0x08135012, 0x00141c43,
0x1024a823, 0xf2340143, 0x2804001a, 0xd1009020,
0x1814e408, 0xf655a825, 0x08520004, 0x1c120542,
0x001af231, 0xf5314ff1, 0x83a0001a, 0x50a30012,
0x20326ff2, 0xa8249396, 0xf7415010, 0x1c400004,
0x50018dc6, 0x001af501, 0xf640a824, 0x28000005,
0xa8139016, 0xd438d200, 0xd838d100, 0x28034ff0,
0x1c20a512, 0xa8128014, 0xd438d100, 0xd838d000,
0x51f22802, 0x1c12a501, 0xe404d000, 0xfc201800,
0x28000200, 0xd000908e, 0x5011e41b, 0xe408d500,
0x18521f01, 0x0004f643, 0x08314103, 0xe808d300,
0xfc420521, 0xfc32fff8, 0x1c51ffff, 0xfffffc41,
0x1ffffc31, 0x4000fc15, 0x2800a810, 0x1832a521,
0x04122800, 0xfc131c32, 0xfc422000, 0xa4310001,
0xe804d300, 0xd200a521, 0x28008000, 0xfc411c31,
0xa5120004, 0xfc412800, 0x1c320002, 0x5005a452,
0x1c32a512, 0x0004f642, 0x10220041, 0xf5150121,
0xf642001a, 0xf7120017, 0xfa000018, 0xa824051a,
0xa812801c, 0xe000d100, 0x0007fc40, 0xe808d300,
0x28025025, 0x1832a501, 0x1c320512, 0xa8111c45,
0x92942925, 0xe400d000, 0x28010047, 0x00131804,
0xfc429022, 0x04240004, 0x902a2804, 0xfc421801,
0x04210001, 0x901e2901, 0xfc411800, 0x04100002,
0xfc2481c6, 0x28048000, 0x1801900c, 0x2000fc21,
0x91ae2801, 0xfc410032, 0xfc31ffff, 0xfc401fff,
0xfc30fff8, 0xd300ffff, 0xfc45e808, 0x28020004,
0xa501ac12, 0xac292802, 0x04101830, 0x2000fc11,
0xfc401c30, 0xa4140001, 0x8000d300, 0xd000a504,
0x2802e804, 0xa5531c04, 0x00711c03, 0x0005f615,
0x902e2805, 0xd500a810, 0xd700d410, 0x2800d810,
0x5007a575, 0x00100072, 0x6ff24017, 0x1e520120,
0x0006f702, 0xf6120070, 0x6ff00005, 0x9fe62420,
0xe404d000, 0x18000017, 0x0200fc20, 0x90602800,
0xe41bd000, 0x1f025012, 0xe408d000, 0x00751801,
0xf657ac25, 0x41070004, 0x05120872, 0xd2001c02,
0x1820e808, 0x0410a829, 0xe804d100, 0x00171c20,
0x4000fc11, 0x0002fc42, 0x1c731c74, 0xa8105003,
0xa5212800, 0xf6521c71, 0x00510004, 0x01211022,
0x001af513, 0x0017f652, 0x0018f712, 0xa8108160,
0xd46cd100, 0xd86cd200, 0x28005004, 0x1c14a521,
0xe804d400, 0xd4001c43, 0x5013e408, 0x00751841,
0x0004f652, 0x50420823, 0x08020513, 0xd4001c43,
0x0723e444, 0x04321842, 0xfa001c42, 0x0050038a,
0xd3005031, 0x1c01f000, 0x0004f602, 0x10520031,
0xf0170121, 0x00710020, 0x603112c1, 0x90562801,
0x50124ff1, 0x08121287, 0xe414d100, 0xac2a6307,
0x01370724, 0xfc071812, 0x042402bc, 0x1f1460f4,
0x0004f604, 0x01431054, 0x0024f234, 0x0024f233,
0x124360f4, 0x60f30104, 0x40134064, 0x4ff31e45,
0x29034014, 0x40171f75, 0xa82b9ff4, 0x60f20532,
0x800a1f12, 0xfaff0005, 0x0050f53a, 0x80a65005,
0xfc201800, 0x28004000, 0xd10090aa, 0x2803d46c,
0xd86cd000, 0xa5015014, 0x1c105000, 0xe408d100,
0x18120035, 0x2805ac27, 0x0004f673, 0x08344103,
0x1c140524, 0xfffffc44, 0x1ffffc34, 0xfff8fc41,
0xfffffc31, 0xd400a442, 0xa512e808, 0x28051843,
0x0001fc41, 0x1c430423, 0x2000fc13, 0x4000fc14,
0xd300a432, 0xa5128000, 0xe804d100, 0x1c122805,
0x0004fc42, 0x2805a523, 0x0002fc42, 0xa4431c13,
0x1c13a523, 0x0004f671, 0x10210072, 0xf5200112,
0xf670001a, 0xf7200017, 0x00500018, 0x0268fa00,
0x5005a820, 0x29051c05, 0xa837a300, 0x41c6a83d,
0x5025a070, 0x8ff01c75, 0xac6d4cc6, 0xac2aac67,
0xd100ac21, 0xfc44e808, 0xfc34fdff, 0x2623ffff,
0x04421812, 0x0200fc44, 0xd2001c12, 0x5001e804,
0xa8741c24, 0x9014ac34, 0x90322803, 0x90382913,
0xf000d100, 0x0268f011, 0x28338052, 0x29439038,
0xd200903e, 0xf021f000, 0xa82b0274, 0x903c2913,
0x0278f022, 0xe010d300, 0x80301c32, 0xf000d100,
0x0264f011, 0x29238026, 0xd1009022, 0xf011f000,
0x8018026c, 0xf000d100, 0x0270f011, 0x2953800e,
0xd100900a, 0xf011f000, 0xd200027c, 0x1c21e00c,
0x2801a831, 0xa829911e, 0xd4005003, 0x1081e400,
0xac190501, 0xf33cd100, 0xac100e10, 0xa8210030,
0xe004d500, 0x01011020, 0x00011810, 0x1101a81a,
0x1c520512, 0x2911a829, 0x1300900a, 0xe008d100,
0xd0001c10, 0x5011e018, 0x1c01ac3b, 0xfc401841,
0x04010400, 0x9ff62801, 0x04011841, 0x28015010,
0xfc4190b8, 0xd2000400, 0xac58e804, 0xe084d000,
0x1c21ac51, 0xe080d100, 0x18155012, 0xe088d100,
0x60f5ac4d, 0xac401800, 0x00501c12, 0xf836faff,
0x90702910, 0x1025a84c, 0xf000d100, 0x0100fc42,
0x00400151, 0x0280f011, 0x0300fc20, 0x28010421,
0xd2009016, 0x1384f41c, 0xf2230152, 0x1a220002,
0x1f341f24, 0x00528010, 0xfc321304, 0x1d242000,
0x1d24a812, 0x902c2800, 0x901c2801, 0xf41cd000,
0xf2010150, 0x1a000002, 0xfc22a842, 0x1282ff00,
0x1f121f02, 0xa841800e, 0x2000fc35, 0xa8101d51,
0xd4001d01, 0x1840e400, 0x0410a851, 0xa8582800,
0x2c409008, 0x9f4c4010, 0xa830a83b, 0x21034013,
0xfc409efc, 0xd1000200, 0x1c10e804, 0xa8675010,
0x4346a86d, 0xd000a070, 0xd200f000, 0xf201e404,
0x401102fe, 0x02fef501, 0x62011821, 0x901c2801,
0xf330d100, 0x29021e12, 0x5012901a, 0xf0021f12,
0x60f202c4, 0x0001f712, 0xd100800a, 0x5002f330,
0xd1001f12, 0x5082e440, 0xd1001d12, 0xd200e400,
0x8012dc80, 0xf0041823, 0x12e40260, 0xfc3463c4,
0x1d432000, 0xfc441813, 0x04430080, 0x9ff62803,
0xd0008fe4, 0x1801e414, 0x00126071, 0x1f027082,
0xa0701f01, 0xe404d100, 0x18112800, 0x60419012,
0x90262801, 0xe410d000, 0x70411801, 0x60218010,
0x90162801, 0xe410d000, 0x70211801, 0xd0001c01,
0xfc12e804, 0x1c020400, 0xd100a070, 0x0101f000,
0xf6111020, 0x00130314, 0x60130002, 0x2000fc02,
0x900e2803, 0xfc311011, 0xfc212000, 0x800621fc,
0xf33cd100, 0xf41cd300, 0x1d320103, 0x0002f531,
0x0000a070,
};
const unsigned long sizeof_scu_isopprog_array = 4276; /* 0x000010b4 */

View file

@ -150,6 +150,10 @@ ifeq ($(CONFIG_CXD56_I2C_DRIVER),y)
CSRCS += cxd56_i2cdev.c
endif
ifeq ($(CONFIG_CXD56_SPI_DRIVER),y)
CSRCS += cxd56_spidev.c
endif
ifeq ($(CONFIG_VIDEO_ISX012),y)
CSRCS += cxd56_isx012.c
endif
@ -158,6 +162,18 @@ ifeq ($(CONFIG_CXD56_IMAGEPROC),y)
CSRCS += cxd56_imageproc.c
endif
ifeq ($(CONFIG_BCM20706),y)
CSRCS += cxd56_bcm20706.c
endif
ifeq ($(CONFIG_CXD56_EMMC),y)
CSRCS += cxd56_emmcdev.c
endif
ifeq ($(CONFIG_CXD56_SPISD),y)
CSRCS += cxd56_spisd.c
endif
DEPPATH += --dep-path src
VPATH += :src
CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)src)

View file

@ -50,7 +50,7 @@
#include <arch/chip/scu.h>
#ifdef CONFIG_CXD56_DECI_AK09912
#ifdef CONFIG_SENSORS_AK09912_SCU_DECI
# define MAG_NR_SEQS 3
#else
# define MAG_NR_SEQS 1

View file

@ -0,0 +1,165 @@
/****************************************************************************
* boards/arm/cxd56xx/common/src/cxd56_bcm20706.c
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <unistd.h>
#include <stdbool.h>
#include <string.h>
#include <arch/board/board.h>
#include "cxd56_gpio.h"
#include "cxd56_sysctl.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define BCM20707_RST_N PIN_SEN_IRQ_IN
#define BCM20707_DEV_WAKE PIN_EMMC_DATA3
#define BCM20707_RST_DELAY (50 * 1000) /* ms */
/****************************************************************************
* Private Data
****************************************************************************/
/****************************************************************************
* Private Functions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_bluetooth_pin_cfg
*
* Description:
* Setup pin configuration for bcm20706.
*
****************************************************************************/
int board_bluetooth_pin_cfg(void)
{
int ret = 0;
ret = cxd56_gpio_config(BCM20707_RST_N, false);
if (ret != 0)
{
return ret;
}
cxd56_gpio_write(BCM20707_RST_N, false);
ret = cxd56_gpio_config(BCM20707_DEV_WAKE, false);
if (ret != 0)
{
return ret;
}
cxd56_gpio_write(BCM20707_DEV_WAKE, true);
return ret;
}
/****************************************************************************
* Name: board_bluetooth_uart_pin_cfg
*
* Description:
* Setup UART pin configuration for bcm20706.
*
****************************************************************************/
int board_bluetooth_uart_pin_cfg(void)
{
int ret = 0;
/* BCM20706 evaluation board might set pull-down.
* Set float for UART2 CTS
*/
ret = board_gpio_config(PIN_UART2_CTS, 1, 1, 0, 0);
return ret;
}
/****************************************************************************
* Name: board_bluetooth_reset
*
* Description:
* Reset BCM20706.
*
****************************************************************************/
void board_bluetooth_reset(void)
{
cxd56_gpio_write(BCM20707_RST_N, false);
usleep(BCM20707_RST_DELAY);
cxd56_gpio_write(BCM20707_RST_N, true);
usleep(BCM20707_RST_DELAY);
}
/****************************************************************************
* Name: board_bluetooth_power_control
*
* Description:
* Power ON/OFF BCM20706.
*
****************************************************************************/
int board_bluetooth_power_control(bool en)
{
int ret = 0;
ret = board_power_control(POWER_BTBLE, en);
return ret;
}
/****************************************************************************
* Name: board_bluetooth_enable_sleep
*
* Description:
* Sleep mode ON/OFF BCM20706.
*
****************************************************************************/
void board_bluetooth_enable_sleep(bool en)
{
cxd56_gpio_write(BCM20707_DEV_WAKE, en);
}

View file

@ -50,7 +50,7 @@
#include "cxd56_i2c.h"
#ifdef CONFIG_CXD56_DECI_BM1422GMV
#ifdef CONFIG_SENSORS_BM1422GMV_SCU_DECI
# define BM1422GMV_PATH_CNT 3
#else
# define BM1422GMV_PATH_CNT 1

View file

@ -48,17 +48,9 @@
#include "cxd56_i2c.h"
#ifdef CONFIG_CXD56_DECI_GYRO
#define GYRO_NR_SEQS 3
#else
#define GYRO_NR_SEQS 1
#endif
#ifdef CONFIG_CXD56_DECI_ACCEL
#define ACCEL_NR_SEQS 3
#else
#define ACCEL_NR_SEQS 1
#endif
/****************************************************************************
* Public Functions
****************************************************************************/
int board_bmi160_initialize(int bus)
{

View file

@ -48,15 +48,19 @@
#include <nuttx/sensors/bmi160.h>
#include <arch/chip/scu.h>
#if defined(CONFIG_SENSORS_BMI160_SCU_SPI)
#include "cxd56_spi.h"
#else
#include "cxd56_i2c.h"
#endif
#ifdef CONFIG_CXD56_DECI_GYRO
#ifdef CONFIG_SENSORS_BMI160_SCU_DECI_GYRO
# define GYRO_NR_SEQS 3
#else
# define GYRO_NR_SEQS 1
#endif
#ifdef CONFIG_CXD56_DECI_ACCEL
#ifdef CONFIG_SENSORS_BMI160_SCU_DECI_ACCEL
# define ACCEL_NR_SEQS 3
#else
# define ACCEL_NR_SEQS 1
@ -67,6 +71,7 @@
****************************************************************************/
#if defined(CONFIG_SENSORS_BMI160_SCU)
#if defined(CONFIG_SENSORS_BMI160_SCU_SPI)
int board_bmi160_initialize(int bus)
{
@ -120,4 +125,59 @@ int board_bmi160_initialize(int bus)
return ret;
}
#endif
#else /* !CONFIG_SENSORS_BMI160_SCU_SPI */
int board_bmi160_initialize(int bus)
{
int ret;
FAR struct i2c_master_s *i2c;
sninfo("Initializing BMI160..\n");
/* Initialize i2c deivce */
i2c = cxd56_i2cbus_initialize(bus);
if (!i2c)
{
snerr("ERROR: Failed to initialize i2c%d.\n", bus);
return -ENODEV;
}
int i;
ret = bmi160_init(i2c, bus);
if (ret < 0)
{
snerr("Error initialize BMI160\n");
return ret;
}
/* Create char devices for each FIFOs */
for (i = 0; i < GYRO_NR_SEQS; i++)
{
ret = bmi160gyro_register("/dev/gyro", i, i2c, bus);
if (ret < 0)
{
snerr("Error registering gyroscope. %d\n", ret);
return ret;
}
}
/* Create char devices for each FIFOs */
for (i = 0; i < ACCEL_NR_SEQS; i++)
{
ret = bmi160accel_register("/dev/accel", i, i2c, bus);
if (ret < 0)
{
snerr("Error registering accelerometer. %d\n", ret);
return ret;
}
}
return ret;
}
#endif /* CONFIG_SENSORS_BMI160_SCU_SPI */
#endif /* CONFIG_SENSORS_BMI160_SCU */

View file

@ -49,18 +49,6 @@
#include "cxd56_spi.h"
#ifdef CONFIG_CXD56_DECI_GYRO
# define GYRO_NR_SEQS 3
#else
# define GYRO_NR_SEQS 1
#endif
#ifdef CONFIG_CXD56_DECI_ACCEL
# define ACCEL_NR_SEQS 3
#else
# define ACCEL_NR_SEQS 1
#endif
/****************************************************************************
* Public Functions
****************************************************************************/

View file

@ -50,13 +50,13 @@
#include "cxd56_i2c.h"
#ifdef CONFIG_CXD56_DECI_PRESS
#ifdef CONFIG_SENSORS_BMP280_SCU_DECI_PRESS
# define PRESS_NR_SEQS 3
#else
# define PRESS_NR_SEQS 1
#endif
#ifdef CONFIG_CXD56_DECI_TEMP
#ifdef CONFIG_SENSORS_BMP280_SCU_DECI_TEMP
# define TEMP_NR_SEQS 3
#else
# define TEMP_NR_SEQS 1

View file

@ -0,0 +1,101 @@
/****************************************************************************
* boards/arm/cxd56xx/common/src/cxd56_emmcdev.c
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdio.h>
#include <errno.h>
#include <debug.h>
#include <sys/mount.h>
#include <nuttx/board.h>
#include <arch/board/board.h>
#include "cxd56_emmc.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifndef CONFIG_SFC_DEVNO
# define CONFIG_SFC_DEVNO 0
#endif
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_emmc_initialize
*
* Description:
* Initialize the eMMC device and mount the file system.
*
****************************************************************************/
int board_emmc_initialize(void)
{
int ret;
/* Power on the eMMC device */
ret = board_power_control(POWER_EMMC, true);
if (ret)
{
ferr("ERROR: Failed to power on eMMC. %d\n", ret);
return -ENODEV;
}
/* Initialize the eMMC deivce */
ret = cxd56_emmcinitialize();
if (ret < 0)
{
ferr("ERROR: Failed to initialize eMMC. %d\n ", ret);
return -ENODEV;
}
/* Mount the eMMC deivce */
ret = mount("/dev/emmc0", "/mnt/emmc", "vfat", 0, NULL);
if (ret < 0)
{
ferr("ERROR: Failed to mount the eMMC. %d\n", errno);
}
return ret;
}

View file

@ -426,3 +426,7 @@ FAR struct lcd_dev_s *board_lcd_getdev(int lcddev)
return NULL;
}
void board_lcd_uninitialize(void)
{
}

View file

@ -71,8 +71,6 @@
#define SLEEP_CANCEL_TIME (13*1000) /* ms */
#define POWER_CHECK_TIME (1*1000) /* ms */
#define ALL_POWERON (7)
#define ALL_POWEROFF (0)
#define POWER_CHECK_RETRY (10)
/****************************************************************************
@ -88,11 +86,8 @@ FAR struct i2c_master_s *i2c;
int board_isx012_power_on(void)
{
int ret;
uint32_t stat;
int i;
/* 'POWER_IMAGE_SENSOR==PMIC_GPO(4/5/7)' */
ret = board_power_control(POWER_IMAGE_SENSOR, true);
if (ret)
{
@ -103,17 +98,15 @@ int board_isx012_power_on(void)
ret = -ETIMEDOUT;
for (i = 0; i < POWER_CHECK_RETRY; i++)
{
stat = 0;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(4)) << 0;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(5)) << 1;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(7)) << 2;
if (stat == ALL_POWERON)
/* Need to wait for a while after power-on */
nxsig_usleep(POWER_CHECK_TIME);
if (true == board_power_monitor(POWER_IMAGE_SENSOR))
{
ret = OK;
break;
}
nxsig_usleep(POWER_CHECK_TIME);
}
return ret;
@ -122,11 +115,8 @@ int board_isx012_power_on(void)
int board_isx012_power_off(void)
{
int ret;
uint32_t stat;
int i;
/* POWER_IMAGE_SENSOR==PMIC_GPO(4/5/7) */
ret = board_power_control(POWER_IMAGE_SENSOR, false);
if (ret)
{
@ -137,11 +127,7 @@ int board_isx012_power_off(void)
ret = -ETIMEDOUT;
for (i = 0; i < POWER_CHECK_RETRY; i++)
{
stat = 0;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(4)) << 0;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(5)) << 1;
stat |= (uint32_t)board_power_monitor(PMIC_GPO(7)) << 2;
if (stat == ALL_POWEROFF)
if (false == board_power_monitor(POWER_IMAGE_SENSOR))
{
ret = OK;
break;

View file

@ -50,7 +50,7 @@
#include "cxd56_i2c.h"
#ifdef CONFIG_CXD56_DECI_KX022
#ifdef CONFIG_SENSORS_KX022_SCU_DECI
# define KX022_FIFO_CNT 3
#else
# define KX022_FIFO_CNT 1

View file

@ -89,12 +89,13 @@
* Private Data
****************************************************************************/
struct lpm013m091a_lcd_s
struct lpm013m091a4ws_lcd_s
{
struct lpm013m091a_lcd_s dev;
struct spi_dev_s *spi;
};
static struct lpm013m091a_lcd_s g_lcddev;
static struct lpm013m091a4ws_lcd_s g_lcddev;
static struct lcd_dev_s *g_lcd = NULL;
/****************************************************************************
@ -116,7 +117,8 @@ static struct lcd_dev_s *g_lcd = NULL;
static void cxd56_lpm013m091a4ws_select(FAR struct lpm013m091a_lcd_s *lcd)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
SPI_LOCK(priv->spi, true);
SPI_SELECT(priv->spi, SPIDEV_DISPLAY(0), true);
@ -137,7 +139,8 @@ static void cxd56_lpm013m091a4ws_select(FAR struct lpm013m091a_lcd_s *lcd)
static void cxd56_lpm013m091a4ws_deselect(FAR struct lpm013m091a_lcd_s *lcd)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
SPI_SELECT(priv->spi, SPIDEV_DISPLAY(0), false);
SPI_LOCK(priv->spi, false);
@ -193,7 +196,8 @@ static int cxd56_lpm013m091a4ws_backlight(FAR struct lpm013m091a_lcd_s *lcd,
static int cxd56_lpm013m091a4ws_sendcmd(FAR struct lpm013m091a_lcd_s *lcd,
const uint8_t cmd)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
lcdinfo("%02x\n", cmd);
@ -229,7 +233,8 @@ static int cxd56_lpm013m091a4ws_sendcmd(FAR struct lpm013m091a_lcd_s *lcd,
static int cxd56_lpm013m091a4ws_sendparam(FAR struct lpm013m091a_lcd_s *lcd,
const uint8_t param)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
cxd56_gpio_write(DISPLAY_DC, true); /* Indicate DATA */
SPI_SEND(priv->spi, param);
@ -256,7 +261,8 @@ static int cxd56_lpm013m091a4ws_sendparam(FAR struct lpm013m091a_lcd_s *lcd,
static int cxd56_lpm013m091a4ws_sendgram(FAR struct lpm013m091a_lcd_s *lcd,
const uint16_t *wd, uint32_t nwords)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
lcdinfo("lcd:%p, wd=%p, nwords=%d\n", lcd, wd, nwords);
@ -284,7 +290,8 @@ static int cxd56_lpm013m091a4ws_sendgram(FAR struct lpm013m091a_lcd_s *lcd,
static int cxd56_lpm013m091a4ws_recvparam(FAR struct lpm013m091a_lcd_s *lcd,
uint8_t *param)
{
FAR struct lpm013m091a_lcd_s *priv = (FAR struct lpm013m091a_lcd_s *)lcd;
FAR struct lpm013m091a4ws_lcd_s *priv
= (FAR struct lpm013m091a4ws_lcd_s *)lcd;
cxd56_gpio_write(DISPLAY_DC, true); /* Indicate DATA */
*param = (uint8_t)(SPI_SEND(priv->spi, param) & 0xff);
@ -332,7 +339,7 @@ static int cxd56_lpm013m091a4ws_recvgram(FAR struct lpm013m091a_lcd_s *lcd,
int board_lcd_initialize(void)
{
FAR struct lpm013m091a_lcd_s *priv = &g_lcddev;
FAR struct lpm013m091a4ws_lcd_s *priv = &g_lcddev;
FAR struct spi_dev_s *spi;
#if defined(CONFIG_CXD56_DMAC)
DMA_HANDLE hdl;

View file

@ -192,7 +192,7 @@ struct sensor_device_s
static struct sensor_device_s sensor_device[] =
{
#if defined(CONFIG_SENSORS_BMI160) || defined(CONFIG_SENSORS_BMI160_SCU)
# ifdef CONFIG_SENSORS_BMI160_I2C
# if defined(CONFIG_SENSORS_BMI160_I2C) || defined(CONFIG_SENSORS_BMI160_SCU_I2C)
_I2C_DEVICE_WOPATH(bmi160), /* Accel + Gyro */
# else /* CONFIG_SENSORS_BMI160_SPI */
_SPI_DEVICE_WOPATH(bmi160),

View file

@ -0,0 +1,84 @@
/****************************************************************************
* boards/arm/cxd56xx/common/src/cxd56_spidev.c
*
* Copyright 2020 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <stdio.h>
#include <debug.h>
#include <errno.h>
#include <nuttx/spi/spi_transfer.h>
#include "cxd56_spi.h"
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_spidev_initialize
*
* Description:
* Initialize and register spi driver for the specified spi port
*
****************************************************************************/
int board_spidev_initialize(int port)
{
int ret;
FAR struct spi_dev_s *spi;
_info("Initializing /dev/spi%d..\n", port);
/* Initialize spi device */
spi = cxd56_spibus_initialize(port);
if (!spi)
{
_err("ERROR: Failed to initialize spi%d.\n", port);
return -ENODEV;
}
ret = spi_register(spi, port);
if (ret < 0)
{
_err("ERROR: Failed to register spi%d: %d\n", port, ret);
}
return ret;
}

View file

@ -0,0 +1,145 @@
/****************************************************************************
* boards/arm/cxd56xx/common/src/cxd56_spisd.c
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <debug.h>
#include <sys/mount.h>
#include <nuttx/mmcsd.h>
#include <nuttx/board.h>
#include "cxd56_spi.h"
#include "cxd56_gpio.h"
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/* Configuration ************************************************************/
#ifndef CONFIG_CXD56_SPISD_SLOT_NO
# define CONFIG_CXD56_SPISD_SLOT_NO 0
#endif
/* Please configure the pin assignment for your board */
#ifndef MMCSD_DETECT
# define MMCSD_DETECT PIN_I2S0_DATA_OUT
#endif
/****************************************************************************
* Public Functions
****************************************************************************/
/****************************************************************************
* Name: board_spisd_initialize
*
* Description:
* Initialize the SPI-based SD card.
*
****************************************************************************/
int board_spisd_initialize(int minor, int bus)
{
int ret;
FAR struct spi_dev_s *spi;
/* Enable input of detect pin */
cxd56_gpio_config(MMCSD_DETECT, true);
/* Initialize spi deivce */
spi = cxd56_spibus_initialize(bus);
if (!spi)
{
ferr("ERROR: Failed to initialize spi%d.\n", bus);
return -ENODEV;
}
/* Get the SPI driver instance for the SD chip select */
finfo("Initializing SPI for the MMC/SD slot\n");
ret = mmcsd_spislotinitialize(minor, CONFIG_CXD56_SPISD_SLOT_NO, spi);
if (ret < 0)
{
ferr("ERROR: Failed to bind SPI device to MMC/SD slot %d: %d\n",
CONFIG_CXD56_SPISD_SLOT_NO, ret);
return ret;
}
/* Mount filesystem */
ret = mount("/dev/mmcsd0", "/mnt/sd0", "vfat", 0, NULL);
if (ret < 0)
{
_err("ERROR: Failed to mount the SDCARD. %d\n", errno);
}
return OK;
}
/****************************************************************************
* Name: board_spisd_status
*
* Description:
* Get the status whether SD Card is present or not.
* This function is called only from cxd56_spi.c.
*
* Returned Value:
* Return SPI_STATUS_PRESENT if SD Card is present. Otherwise, return 0.
*
****************************************************************************/
uint8_t board_spisd_status(FAR struct spi_dev_s *dev, uint32_t devid)
{
uint8_t ret = 0;
if (devid == SPIDEV_MMCSD(0))
{
/* MMCSD_DETECT is mapping to SD Card detect pin
* MMCSD_DETECT = 0: Inserted
* MMCSD_DETECT = 1: Removed
*/
ret = cxd56_gpio_read(MMCSD_DETECT) ? 0 : SPI_STATUS_PRESENT;
}
return ret;
}

View file

@ -33,6 +33,10 @@
#
############################################################################
ARCH_SRCDIR = $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(ARCH_SRCDIR)$(DELIM)chip)
CFLAGS += $(shell $(INCDIR) $(INCDIROPT) "$(CC)" $(ARCH_SRCDIR)$(DELIM)common)
ifeq ($(CONFIG_CXD56_AUDIO),y)
CSRCS += cxd56_audio.c
CSRCS += cxd56_audio_config.c

View file

@ -1,4 +1,4 @@
/***************************************************************************
/****************************************************************************
* boards/arm/cxd56xx/drivers/audio/cxd56_audio.c
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
@ -33,7 +33,7 @@
*
****************************************************************************/
/***************************************************************************
/****************************************************************************
* Included Files
****************************************************************************/
@ -59,14 +59,14 @@
#include "cxd56_audio_ac_reg.h"
#include "cxd56_audio_bca_reg.h"
/***************************************************************************
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#define AUDIO_DNC_ID_NUM (CXD56_AUDIO_DNC_ID_FF + 1)
#define AUDIO_VOL_ID_NUM (CXD56_AUDIO_VOLID_MIXER_OUT + 1)
/***************************************************************************
/****************************************************************************
* Private Types
****************************************************************************/
@ -141,7 +141,7 @@ struct power_on_param_s
struct data_path_s path;
};
/***************************************************************************
/****************************************************************************
* Private Data
****************************************************************************/
@ -219,11 +219,11 @@ static struct power_on_param_s g_pwon_param =
}
};
/***************************************************************************
/****************************************************************************
* Public Data
****************************************************************************/
/***************************************************************************
/****************************************************************************
* Public Functions
****************************************************************************/
@ -760,7 +760,8 @@ CXD56_AUDIO_ECODE cxd56_audio_unmute_vol(cxd56_audio_volid_t id)
return ret;
}
CXD56_AUDIO_ECODE cxd56_audio_mute_vol_fade(cxd56_audio_volid_t id, bool wait)
CXD56_AUDIO_ECODE cxd56_audio_mute_vol_fade(cxd56_audio_volid_t id,
bool wait)
{
CXD56_AUDIO_ECODE ret = CXD56_AUDIO_ECODE_OK;
@ -1041,8 +1042,9 @@ CXD56_AUDIO_ECODE cxd56_audio_set_dmacb(cxd56_audio_dma_t handle,
return ret;
}
CXD56_AUDIO_ECODE cxd56_audio_get_dmamstate(cxd56_audio_dma_t handle,
FAR cxd56_audio_dma_mstate_t *state)
CXD56_AUDIO_ECODE
cxd56_audio_get_dmamstate(cxd56_audio_dma_t handle,
FAR cxd56_audio_dma_mstate_t *state)
{
CXD56_AUDIO_ECODE ret = CXD56_AUDIO_ECODE_OK;

View file

@ -354,7 +354,7 @@ typedef enum
* Public Function Prototypes
****************************************************************************/
extern uint32_t as_aca_control(uint8_t type, uint32_t param);
extern uint32_t fw_as_acacontrol(uint8_t type, uint32_t param);
/****************************************************************************
* Private Functions
@ -636,7 +636,7 @@ void get_pwon_out_param(as_aca_pulco_out_param_t *param)
CXD56_AUDIO_ECODE cxd56_audio_aca_poweron(void)
{
if (as_aca_control(AS_ACA_CHECK_ID, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_CHECK_ID, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_CHKID;
}
@ -644,7 +644,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron(void)
as_aca_pulco_param_t pwon_param;
get_pwon_param(&pwon_param);
if (as_aca_control(AS_ACA_POWER_ON_COMMON, (uint32_t)&pwon_param) != 0)
if (fw_as_acacontrol(AS_ACA_POWER_ON_COMMON, (uint32_t)&pwon_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWON;
}
@ -652,7 +652,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron(void)
as_ser_des_param_t serial_param;
get_serial_param(&serial_param);
if (as_aca_control(AS_ACA_SET_SERDES, (uint32_t)&serial_param) != 0)
if (fw_as_acacontrol(AS_ACA_SET_SERDES, (uint32_t)&serial_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_SERIAL;
}
@ -662,7 +662,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff(void)
{
if (as_aca_control(AS_ACA_POWER_OFF_COMMON, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_POWER_OFF_COMMON, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWOFF;
}
@ -672,7 +672,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_poweron_micbias(void)
{
if (as_aca_control(AS_ACA_POWER_ON_MICBIAS, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_POWER_ON_MICBIAS, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWON_MBIAS;
}
@ -687,7 +687,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron_input(
get_input_param(&pwon_input_param, gain);
if (as_aca_control(AS_ACA_POWER_ON_INPUT,
if (fw_as_acacontrol(AS_ACA_POWER_ON_INPUT,
(uint32_t)&pwon_input_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWON_INPUT;
@ -702,7 +702,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_set_smaster(void)
get_smaster_param(&smaster_param);
if (as_aca_control(AS_ACA_SET_SMASTER, (uint32_t)&smaster_param) != 0)
if (fw_as_acacontrol(AS_ACA_SET_SMASTER, (uint32_t)&smaster_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_SET_SMASTER;
}
@ -716,7 +716,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron_output(void)
get_pwon_out_param(&pwon_output_param);
if (as_aca_control(AS_ACA_POWER_ON_OUTPUT,
if (fw_as_acacontrol(AS_ACA_POWER_ON_OUTPUT,
(uint32_t)&pwon_output_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWON_OUTPUT;
@ -727,7 +727,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweron_output(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff_input(void)
{
if (as_aca_control(AS_ACA_POWER_OFF_INPUT, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_POWER_OFF_INPUT, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWOFF_INPUT;
}
@ -737,7 +737,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff_input(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff_output(void)
{
if (as_aca_control(AS_ACA_POWER_OFF_OUTPUT, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_POWER_OFF_OUTPUT, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_PWOFF_OUTPUT;
}
@ -747,7 +747,8 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_poweroff_output(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_enable_output(void)
{
if (as_aca_control(AS_ACA_SET_OUTPUT_DEVICE, (uint32_t)AS_OUT_DEV_SP) != 0)
if (fw_as_acacontrol(AS_ACA_SET_OUTPUT_DEVICE,
(uint32_t)AS_OUT_DEV_SP) != 0)
{
return CXD56_AUDIO_ECODE_ANA_ENABLE_OUTPUT;
}
@ -757,7 +758,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_enable_output(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_disable_output(void)
{
if (as_aca_control(AS_ACA_SET_OUTPUT_DEVICE,
if (fw_as_acacontrol(AS_ACA_SET_OUTPUT_DEVICE,
(uint32_t)AS_OUT_DEV_OFF) != 0)
{
return CXD56_AUDIO_ECODE_ANA_DISABLE_OUTPUT;
@ -773,7 +774,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_set_micgain(
get_input_param(&mic_gain_param, gain);
if (as_aca_control(AS_ACA_INIT_AMIC, (uint32_t)&mic_gain_param) != 0)
if (fw_as_acacontrol(AS_ACA_INIT_AMIC, (uint32_t)&mic_gain_param) != 0)
{
return CXD56_AUDIO_ECODE_ANA_SET_MICGAIN;
}
@ -783,7 +784,7 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_set_micgain(
CXD56_AUDIO_ECODE cxd56_audio_aca_notify_micbootdone(void)
{
if (as_aca_control(AS_ACA_SET_AMIC_BOOT_DONE, (uint32_t)NULL) != 0)
if (fw_as_acacontrol(AS_ACA_SET_AMIC_BOOT_DONE, (uint32_t)NULL) != 0)
{
return CXD56_AUDIO_ECODE_ANA_NOTIFY_MICBOOT;
}
@ -793,12 +794,12 @@ CXD56_AUDIO_ECODE cxd56_audio_aca_notify_micbootdone(void)
CXD56_AUDIO_ECODE cxd56_audio_aca_read_reg(as_aca_pulco_reg_param_t *param)
{
as_aca_control(AS_ACA_GET_REGISTER, (uint32_t)param);
fw_as_acacontrol(AS_ACA_GET_REGISTER, (uint32_t)param);
return CXD56_AUDIO_ECODE_OK;
}
CXD56_AUDIO_ECODE cxd56_audio_aca_write_reg(as_aca_pulco_reg_param_t *param)
{
as_aca_control(AS_ACA_SET_REGISTER, (uint32_t)param);
fw_as_acacontrol(AS_ACA_SET_REGISTER, (uint32_t)param);
return CXD56_AUDIO_ECODE_OK;
}

View file

@ -51,6 +51,7 @@
#include "cxd56_audio_config.h"
#include "cxd56_audio_analog.h"
#include "cxd56_audio_aca.h"
#include "cxd56_clock.h"
/****************************************************************************
* Pre-processor Definitions
@ -58,14 +59,6 @@
#define AUD_MCLK_EXT (0u<<16) /* External XTAL */
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
void cxd56_audio_clock_enable(uint32_t clk, uint32_t div);
void cxd56_audio_clock_disable(void);
bool cxd56_audio_clock_is_enabled(void);
/****************************************************************************
* Private Data
****************************************************************************/

View file

@ -649,7 +649,7 @@ bool cxd56_audio_bca_reg_is_dma_fifo_empty(cxd56_audio_dma_t handle)
break;
default:
reg_id = BCA_I2S2_OUT_RTF_TRG;
reg_id = BCA_I2S2_OUT_RTD_TRG;
break;
}
@ -878,7 +878,7 @@ void cxd56_audio_bca_reg_set_sample_no(cxd56_audio_dma_t handle,
break;
case CXD56_AUDIO_DMAC_I2S0_DOWN:
reg_id = BCA_I2S2_OUT_SAMPLE_NO;
reg_id = BCA_I2S1_OUT_SAMPLE_NO;
break;
default:
@ -902,11 +902,11 @@ void cxd56_audio_bca_reg_start_dma(cxd56_audio_dma_t handle,
break;
case CXD56_AUDIO_DMAC_I2S0_DOWN:
reg_id = BCA_I2S1_OUT_RTF_TRG;
reg_id = BCA_I2S1_OUT_RTD_TRG;
break;
default:
reg_id = BCA_I2S2_OUT_RTF_TRG;
reg_id = BCA_I2S2_OUT_RTD_TRG;
break;
}
@ -924,11 +924,11 @@ void cxd56_audio_bca_reg_stop_dma(cxd56_audio_dma_t handle)
break;
case CXD56_AUDIO_DMAC_I2S0_DOWN:
reg_id = BCA_I2S1_OUT_RTF_TRG;
reg_id = BCA_I2S1_OUT_RTD_TRG;
break;
default:
reg_id = BCA_I2S2_OUT_RTF_TRG;
reg_id = BCA_I2S2_OUT_RTD_TRG;
break;
}
@ -1152,11 +1152,11 @@ uint32_t cxd56_audio_bca_reg_get_dma_state(cxd56_audio_dma_t handle)
break;
case CXD56_AUDIO_DMAC_I2S0_DOWN:
reg_id = BCA_I2S1_OUT_RTF_TRG;
reg_id = BCA_I2S1_OUT_RTD_TRG;
break;
default:
reg_id = BCA_I2S2_OUT_RTF_TRG;
reg_id = BCA_I2S2_OUT_RTD_TRG;
break;
}

4
boards/arm/cxd56xx/drivers/audio/cxd56_audio_bca_reg.h Normal file → Executable file
View file

@ -111,7 +111,7 @@ typedef enum
BCA_I2S2_IN_MON_MONBUF,
BCA_I2S1_OUT_START_ADR,
BCA_I2S1_OUT_SAMPLE_NO,
BCA_I2S1_OUT_RTF_TRG,
BCA_I2S1_OUT_RTD_TRG,
BCA_I2S1_OUT_NOINTR,
BCA_I2S1_OUT_BITWT,
BCA_I2S1_OUT_SD1_R_SEL,
@ -121,7 +121,7 @@ typedef enum
BCA_I2S1_OUT_MON_MONBUF,
BCA_I2S2_OUT_START_ADR,
BCA_I2S2_OUT_SAMPLE_NO,
BCA_I2S2_OUT_RTF_TRG,
BCA_I2S2_OUT_RTD_TRG,
BCA_I2S2_OUT_NOINTR,
BCA_I2S2_OUT_BITWT,
BCA_I2S2_OUT_SD1_R_SEL,

View file

@ -78,5 +78,6 @@ CXD56_AUDIO_ECODE cxd56_audio_dma_start(cxd56_audio_dma_t handle,
uint32_t addr,
uint32_t sample);
CXD56_AUDIO_ECODE cxd56_audio_dma_stop(cxd56_audio_dma_t handle);
void cxd56_audio_dma_int_handler(void);
#endif /* __BOARDS_ARM_CXD56XX_DRIVERS_AUDIO_CXD56_AUDIO_DMA_H */

View file

@ -42,12 +42,7 @@
#include <nuttx/arch.h>
#include "cxd56_audio_irq.h"
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
extern void cxd56_audio_dma_int_handler(void);
#include "cxd56_audio_dma.h"
/****************************************************************************
* Public Functions

View file

@ -11,17 +11,23 @@ if SCU_SENSORS
config SENSORS_AK09912_SCU
bool "Asahi AK09911/AK09912 Compass Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on !SENSORS_AK09912 && (CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ)
---help---
Enable driver for AK09911/AK09912 Compass sensor.
NOTE: This sensor is connected to the SCU unit
if SENSORS_AK09912_SCU
config SENSORS_AK09912_SCU_DECI
bool "AK09912 Magnetometer to decimator"
default n
endif
config SENSORS_APDS9930_SCU
bool "Avago APDS9930 Proximity and Ambient light Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for APDS9930 proximity and ambient light sensor.
@ -29,7 +35,7 @@ if SENSORS_APDS9930_SCU
config SENSORS_APDS9930_PROXIMITY_INTERRUPT
bool "Use Proximity interrupt"
default y
default n
---help---
Use Interrupt when the threshold is exceeded.
In this case, SCU sequencer is not used.
@ -39,32 +45,28 @@ endif
config SENSORS_BH1721FVC_SCU
bool "Rohm BH1721FVC Ambient Light Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for the Rohm BH1721FVC light sensor.
config SENSORS_BH1745NUC_SCU
bool "Rohm BH1745NUC Color Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for BH1745NUC color sensor.
config SENSORS_BM1383GLV_SCU
bool "Rohm BM1383GLV/BM1383AGLV Pressure Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for BM1383GLV/BM1383AGLV pressure sensor.
config SENSORS_BM1422GMV_SCU
bool "Rohm BM1422GMV/BM1422AGMV Magnetic Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for BM1422GMV/BM1422AGMV magnetic sensor.
@ -81,12 +83,17 @@ config BM1422GMV_SLAVE_ADDRESS_0F
bool "0x0F"
endchoice
config SENSORS_BM1422GMV_SCU_DECI
bool "BM1422GMV Magnetometer to decimator"
default n
endif # SENSORS_BM1422GMV_SCU
config SENSORS_BMI160_SCU
bool "Bosch BMI160 Sensor support"
default n
select CXD56_SCU
depends on !SENSORS_BMI160 && (CXD56_SPI3_SCUSEQ || CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ)
---help---
Enable driver support for the Bosch BMI160 sensor.
@ -98,32 +105,51 @@ choice
config SENSORS_BMI160_SCU_SPI
bool "BMI160 SPI Interface"
select CXD56_SPI
depends on CXD56_SPI3_SCUSEQ
---help---
Enables support for the SPI interface.
config SENSORS_BMI160_SCU_I2C
bool "BMI160 I2C Interface"
select CXD56_I2C
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enables support for the I2C interface
endchoice
endif # CONFIG_SENSORS_BMI160_SCU
config SENSORS_BMI160_SCU_DECI_GYRO
bool "BMI160 Gyroscope to decimator"
default n
config SENSORS_BMI160_SCU_DECI_ACCEL
bool "BMI160 Accelerometer to decimator"
default n
endif # SENSORS_BMI160_SCU
config SENSORS_BMP280_SCU
bool "Bosch BMP280 Barometic Pressure Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on !SENSORS_BMP280 && (CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ)
---help---
Enable driver for the Bosch BMP280 barometic pressure sensor.
if SENSORS_BMP280_SCU
config SENSORS_BMP280_SCU_DECI_PRESS
bool "BMP280 Pressure to decimator"
default n
config SENSORS_BMP280_SCU_DECI_TEMP
bool "BMI280 Temperature to decimator"
default n
endif
config SENSORS_KX022_SCU
bool "Kionix KX022/KX122 Acceleration Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for the Kionix KX022/KX122 acceleration sensor.
@ -135,13 +161,16 @@ config SENSORS_KX122
---help---
Use KX122 which has the register upper compatibility with KX022.
config SENSORS_KX022_SCU_DECI
bool "KX022 Accelerometer to decimator"
default n
endif # SENSORS_KX022
config SENSORS_LT1PA01_SCU
bool "Murata LT1PA01 Proximity and Ambient light Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for LT1PA01 proximity and ambient light sensor.
@ -149,7 +178,7 @@ if SENSORS_LT1PA01_SCU
config LT1PA01_PROXIMITY_INTERRUPT
bool "Use Proximity interrupt"
default y
default n
---help---
Use Interrupt when the threshold is exceeded.
In this case, SCU sequencer is not used.
@ -159,8 +188,7 @@ endif # SENSORS_LT1PA01_SCU
config SENSORS_RPR0521RS_SCU
bool "Rohm RPR0521RS Proximity and Ambient light Sensor"
default n
select CXD56_I2C
select CXD56_SCU
depends on CXD56_I2C0_SCUSEQ || CXD56_I2C1_SCUSEQ
---help---
Enable driver for RPR0521RS proximity and ambient light sensor.
@ -168,7 +196,7 @@ if SENSORS_RPR0521RS_SCU
config RPR0521RS_PROXIMITY_INTERRUPT
bool "Use Proximity interrupt"
default y
default n
---help---
Use Interrupt when the threshold is exceeded.
In this case, SCU sequencer is not used.

View file

@ -58,7 +58,7 @@
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_CXD56_DECI_AK09912
#ifdef CONFIG_SENSORS_AK09912_SCU_DECI
# define MAG_SEQ_TYPE SEQ_TYPE_DECI
#else
# define MAG_SEQ_TYPE SEQ_TYPE_NORMAL

View file

@ -124,9 +124,10 @@ static int bm1383glv_open(FAR struct file *filep);
static int bm1383glv_close(FAR struct file *filep);
static ssize_t bm1383glv_read(FAR struct file *filep, FAR char *buffer,
size_t buflen);
static ssize_t bm1383glv_write(FAR struct file *filep, FAR const char *buffer,
size_t buflen);
static int bm1383glv_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
static ssize_t bm1383glv_write(FAR struct file *filep,
FAR const char *buffer, size_t buflen);
static int bm1383glv_ioctl(FAR struct file *filep, int cmd,
unsigned long arg);
/****************************************************************************
* Private Data
@ -298,8 +299,8 @@ static int bm1383glv_seqinit(FAR struct bm1383glv_dev_s *priv)
}
seq_setinstruction(priv->seq, inst, nr);
seq_setsample(priv->seq, BM1383GLV_BYTESPERSAMPLE, 0, BM1383GLV_ELEMENTSIZE,
false);
seq_setsample(priv->seq, BM1383GLV_BYTESPERSAMPLE, 0,
BM1383GLV_ELEMENTSIZE, false);
return OK;
}
@ -330,7 +331,8 @@ static int bm1383glv_open(FAR struct file *filep)
/* goto reset mode */
bm1383glv_putreg8(priv, BM1383GLV_POWER_DOWN, BM1383GLV_POWER_DOWN_PWR_DOWN);
bm1383glv_putreg8(priv, BM1383GLV_POWER_DOWN,
BM1383GLV_POWER_DOWN_PWR_DOWN);
up_mdelay(1);
/* goto stand-by mode */
@ -428,8 +430,8 @@ static ssize_t bm1383glv_read(FAR struct file *filep, FAR char *buffer,
* Name: bm1383glv_write
****************************************************************************/
static ssize_t bm1383glv_write(FAR struct file *filep, FAR const char *buffer,
size_t buflen)
static ssize_t bm1383glv_write(FAR struct file *filep,
FAR const char *buffer, size_t buflen)
{
return -ENOSYS;
}
@ -438,7 +440,8 @@ static ssize_t bm1383glv_write(FAR struct file *filep, FAR const char *buffer,
* Name: bm1383glv_ioctl
****************************************************************************/
static int bm1383glv_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
static int bm1383glv_ioctl(FAR struct file *filep, int cmd,
unsigned long arg)
{
FAR struct inode *inode = filep->f_inode;
FAR struct bm1383glv_dev_s *priv = inode->i_private;

View file

@ -58,7 +58,7 @@
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_CXD56_DECI_BM1422GMV
#ifdef CONFIG_SENSORS_BM1422GMV_SCU_DECI
# define BM1422GMV_SEQ_TYPE SEQ_TYPE_DECI
#else
# define BM1422GMV_SEQ_TYPE SEQ_TYPE_NORMAL
@ -138,9 +138,10 @@ static int bm1422gmv_open(FAR struct file *filep);
static int bm1422gmv_close(FAR struct file *filep);
static ssize_t bm1422gmv_read(FAR struct file *filep, FAR char *buffer,
size_t buflen);
static ssize_t bm1422gmv_write(FAR struct file *filep, FAR const char *buffer,
size_t buflen);
static int bm1422gmv_ioctl(FAR struct file *filep, int cmd, unsigned long arg);
static ssize_t bm1422gmv_write(FAR struct file *filep,
FAR const char *buffer, size_t buflen);
static int bm1422gmv_ioctl(FAR struct file *filep, int cmd,
unsigned long arg);
/****************************************************************************
* Private Data
@ -301,8 +302,8 @@ static int bm1422gmv_seqinit(FAR struct bm1422gmv_dev_s *priv)
/* Set instruction and sample data information to sequencer */
seq_setinstruction(priv->seq, g_bm1422gmvinst, itemsof(g_bm1422gmvinst));
seq_setsample(priv->seq, BM1422GMV_BYTESPERSAMPLE, 0, BM1422GMV_ELEMENTSIZE,
false);
seq_setsample(priv->seq, BM1422GMV_BYTESPERSAMPLE, 0,
BM1422GMV_ELEMENTSIZE, false);
return OK;
}
@ -413,8 +414,8 @@ static ssize_t bm1422gmv_read(FAR struct file *filep, FAR char *buffer,
* Name: bm1422gmv_write
****************************************************************************/
static ssize_t bm1422gmv_write(FAR struct file *filep, FAR const char *buffer,
size_t buflen)
static ssize_t bm1422gmv_write(FAR struct file *filep,
FAR const char *buffer, size_t buflen)
{
return -ENOSYS;
}
@ -423,7 +424,8 @@ static ssize_t bm1422gmv_write(FAR struct file *filep, FAR const char *buffer,
* Name: bm1422gmv_ioctl
****************************************************************************/
static int bm1422gmv_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
static int bm1422gmv_ioctl(FAR struct file *filep, int cmd,
unsigned long arg)
{
FAR struct inode *inode = filep->f_inode;
FAR struct bm1422gmv_dev_s *priv = inode->i_private;

View file

@ -58,17 +58,13 @@
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
#define CONFIG_SENSORS_BMI160_I2C
#endif
#ifdef CONFIG_CXD56_DECI_GYRO
#ifdef CONFIG_SENSORS_BMI160_SCU_DECI_GYRO
# define GYRO_SEQ_TYPE SEQ_TYPE_DECI
#else
# define GYRO_SEQ_TYPE SEQ_TYPE_NORMAL
#endif
#ifdef CONFIG_CXD56_DECI_ACCEL
#ifdef CONFIG_SENSORS_BMI160_SCU_DECI_ACCEL
# define ACCEL_SEQ_TYPE SEQ_TYPE_DECI
#else
# define ACCEL_SEQ_TYPE SEQ_TYPE_NORMAL
@ -247,7 +243,7 @@ uint32_t g_pmu_stat;
struct bmi160_dev_s
{
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
FAR struct i2c_master_s *i2c; /* I2C interface */
uint8_t addr; /* BMP280 I2C address */
int freq; /* BMP280 Frequency <= 3.4MHz */
@ -255,7 +251,7 @@ struct bmi160_dev_s
FAR struct seq_s *seq; /* Sequencer */
int fifoid; /* Sequencer id */
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
FAR struct spi_dev_s *spi; /* SPI interface */
FAR struct seq_s *seq; /* Sequencer */
int fifoid; /* Sequencer id */
@ -285,13 +281,13 @@ static int bmi160_ioctl(FAR struct file *filep, int cmd,
static int bmi160_checkid(FAR struct bmi160_dev_s *priv);
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
static int bmi160_devregister(FAR const char *devpath,
FAR struct i2c_master_s *dev,
int minor,
const struct file_operations *fops,
int port);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
static int bmi160_devregister(FAR const char *devpath,
FAR struct spi_dev_s *dev,
int minor,
@ -369,9 +365,9 @@ static uint8_t bmi160_getreg8(FAR struct bmi160_dev_s *priv, uint8_t regaddr)
inst[0] = SCU_INST_SEND(regaddr | 0x80);
inst[1] = SCU_INST_RECV(1) | SCU_INST_LAST;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
scu_i2ctransfer(priv->port, priv->addr, inst, 2, &regval, 1);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
scu_spitransfer(0, inst, 2, &regval, 1);
#endif
@ -408,9 +404,9 @@ static uint8_t bmi160_getregs(FAR struct bmi160_dev_s *priv,
ilen = 2;
}
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
scu_i2ctransfer(priv->port, priv->addr, inst, ilen, buffer, len);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
scu_spitransfer(0, inst, ilen, buffer, len);
#endif
return OK;
@ -435,9 +431,9 @@ static void bmi160_putreg8(FAR struct bmi160_dev_s *priv,
inst[0] = SCU_INST_SEND(regaddr);
inst[1] = SCU_INST_SEND(regval) | SCU_INST_LAST;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
scu_i2ctransfer(priv->port, priv->addr, inst, 2, NULL, 0);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
scu_spitransfer(0, inst, 2, NULL, 0);
#endif
}
@ -471,10 +467,10 @@ static int bmi160_seqinit_gyro(FAR struct bmi160_dev_s *priv)
/* Open sequencer */
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
g_seq_gyro = seq_open(GYRO_SEQ_TYPE,
(priv->port == 0) ? SCU_BUS_I2C0 : SCU_BUS_I2C1);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
g_seq_gyro = seq_open(GYRO_SEQ_TYPE, SCU_BUS_SPI);
#endif
if (!g_seq_gyro)
@ -484,9 +480,9 @@ static int bmi160_seqinit_gyro(FAR struct bmi160_dev_s *priv)
priv->seq = g_seq_gyro;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
seq_setaddress(priv->seq, priv->addr);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
seq_setaddress(priv->seq, 0);
#endif
@ -510,10 +506,10 @@ static int bmi160_seqinit_accel(FAR struct bmi160_dev_s *priv)
/* Open sequencer */
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
g_seq_accel = seq_open(ACCEL_SEQ_TYPE,
(priv->port == 0) ? SCU_BUS_I2C0 : SCU_BUS_I2C1);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
g_seq_accel = seq_open(ACCEL_SEQ_TYPE, SCU_BUS_SPI);
#endif
if (!g_seq_accel)
@ -523,9 +519,9 @@ static int bmi160_seqinit_accel(FAR struct bmi160_dev_s *priv)
priv->seq = g_seq_accel;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
seq_setaddress(priv->seq, priv->addr);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
seq_setaddress(priv->seq, 0);
#endif
@ -805,13 +801,13 @@ static int bmi160_checkid(FAR struct bmi160_dev_s *priv)
*
****************************************************************************/
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
static int bmi160_devregister(FAR const char *devpath,
FAR struct i2c_master_s *dev,
int minor,
const struct file_operations *fops,
int port)
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
static int bmi160_devregister(FAR const char *devpath,
FAR struct spi_dev_s *dev,
int minor,
@ -829,7 +825,7 @@ static int bmi160_devregister(FAR const char *devpath,
return -ENOMEM;
}
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
priv->i2c = dev;
priv->seq = NULL;
priv->fifoid = minor;
@ -837,7 +833,7 @@ static int bmi160_devregister(FAR const char *devpath,
priv->freq = BMI160_I2C_FREQ;
priv->port = port;
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
priv->spi = dev;
priv->seq = NULL;
priv->fifoid = minor;
@ -1001,9 +997,9 @@ static int bmi160_set_accel_odr(FAR struct bmi160_dev_s *priv, int odr)
*
****************************************************************************/
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
int bmi160_init(FAR struct i2c_master_s *dev, int port)
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
int bmi160_init(FAR struct spi_dev_s *dev)
#endif
{
@ -1011,7 +1007,7 @@ int bmi160_init(FAR struct spi_dev_s *dev)
struct bmi160_dev_s *priv = &tmp;
int ret;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
/* Setup temporary device structure for initialization */
priv->i2c = dev;
@ -1019,7 +1015,7 @@ int bmi160_init(FAR struct spi_dev_s *dev)
priv->freq = BMI160_I2C_FREQ;
priv->port = port;
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
/* Configure SPI for the BMI160 */
SPI_SETMODE(dev, SPIDEV_MODE3);
@ -1065,19 +1061,19 @@ int bmi160_init(FAR struct spi_dev_s *dev)
*
****************************************************************************/
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
int bmi160gyro_register(FAR const char *devpath, int minor,
FAR struct i2c_master_s *dev, int port)
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
int bmi160gyro_register(FAR const char *devpath, int minor,
FAR struct spi_dev_s *dev)
#endif
{
int ret;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
ret = bmi160_devregister(devpath, dev, minor, &g_bmi160gyrofops, port);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
ret = bmi160_devregister(devpath, dev, minor, &g_bmi160gyrofops);
#endif
if (ret < 0)
@ -1105,19 +1101,19 @@ int bmi160gyro_register(FAR const char *devpath, int minor,
*
****************************************************************************/
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
int bmi160accel_register(FAR const char *devpath, int minor,
FAR struct i2c_master_s *dev, int port)
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
int bmi160accel_register(FAR const char *devpath, int minor,
FAR struct spi_dev_s *dev)
#endif
{
int ret;
#ifdef CONFIG_SENSORS_BMI160_I2C
#ifdef CONFIG_SENSORS_BMI160_SCU_I2C
ret = bmi160_devregister(devpath, dev, minor, &g_bmi160accelfops, port);
#else /* CONFIG_SENSORS_BMI160_SPI */
#else /* CONFIG_SENSORS_BMI160_SCU_SPI */
ret = bmi160_devregister(devpath, dev, minor, &g_bmi160accelfops);
#endif
if (ret < 0)

View file

@ -51,18 +51,18 @@
#include <nuttx/sensors/bmp280.h>
#include <arch/chip/scu.h>
#if defined(CONFIG_I2C) && defined(CONFIG_BMP280_SCU)
#if defined(CONFIG_I2C) && defined(CONFIG_SENSORS_BMP280_SCU)
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_CXD56_DECI_PRESS
#ifdef CONFIG_SENSORS_BMI280_SCU_DECI_PRESS
# define PRESS_SEQ_TYPE SEQ_TYPE_DECI
#else
# define PRESS_SEQ_TYPE SEQ_TYPE_NORMAL
#endif
#ifdef CONFIG_CXD56_DECI_TEMP
#ifdef CONFIG_SENSORS_BMI280_SCU_DECI_TEMP
# define TEMP_SEQ_TYPE SEQ_TYPE_DECI
#else
# define TEMP_SEQ_TYPE SEQ_TYPE_NORMAL
@ -883,7 +883,7 @@ static int bmp280_ioctl_temp(FAR struct file *filep, int cmd,
int bmp280_init(FAR struct i2c_master_s *i2c, int port)
{
struct bmp280_dev_s tmp;
struct *priv = &tmp;
struct bmp280_dev_s *priv = &tmp;
int ret;
/* Setup temporary device structure for initialization */

View file

@ -58,7 +58,7 @@
* Pre-processor Definitions
****************************************************************************/
#ifdef CONFIG_CXD56_DECI_KX022
#ifdef CONFIG_SENSORS_KX022_SCU_DECI
# define KX022_SEQ_TYPE SEQ_TYPE_DECI
#else
# define KX022_SEQ_TYPE SEQ_TYPE_NORMAL

View file

@ -52,7 +52,7 @@
#include <nuttx/irq.h>
#include <arch/chip/scu.h>
#if defined(CONFIG_I2C) && defined(CONFIG_RPR0521RS) && defined(CONFIG_CXD56_SCU)
#if defined(CONFIG_I2C) && defined(CONFIG_SENSORS_RPR0521RS_SCU)
/****************************************************************************
* Pre-processor Definitions

View file

@ -5,6 +5,19 @@
if ARCH_BOARD_SPRESENSE
config BOARD_CUSTOM_PINCONFIG
bool
default y
config BOARD_USB_DISABLE_IN_DEEP_SLEEPING
bool
default y
---help---
Due to the system specification, it's impossible to enter the deep
sleeping mode for the power saving as long as USB is attached. As
the workaround for this restriction, this configuration forces to be
disable the USB function in deep sleeping.
config CXD56_SPIFLASHSIZE
hex
default 0x400000
@ -505,43 +518,43 @@ endif
comment "LTE Options"
menuconfig CXD56_LTE
bool "LTE"
default n
bool "LTE"
default n
if CXD56_LTE
choice
prompt "LTE SPI selection"
default CXD56_LTE_SPI4
prompt "LTE SPI selection"
default CXD56_LTE_SPI4
config CXD56_LTE_SPI4
bool "Use SPI4"
select CXD56_SPI4
bool "Use SPI4"
select CXD56_SPI4
config CXD56_LTE_SPI5
bool "Use SPI5"
select CXD56_SPI5
bool "Use SPI5"
select CXD56_SPI5
endchoice
if CXD56_LTE_SPI4
config CXD56_LTE_SPI4_DMAC
bool "Use DMAC for SPI4"
default y
select CXD56_DMAC_SPI4_TX
select CXD56_DMAC_SPI4_RX
bool "Use DMAC for SPI4"
default y
select CXD56_DMAC_SPI4_TX
select CXD56_DMAC_SPI4_RX
endif # CXD56_LTE_SPI4
if CXD56_LTE_SPI5
config CXD56_LTE_SPI5_DMAC
bool "Use DMAC for SPI5"
default y
select CXD56_DMAC_SPI5_TX
select CXD56_DMAC_SPI5_RX
bool "Use DMAC for SPI5"
default y
select CXD56_DMAC_SPI5_TX
select CXD56_DMAC_SPI5_RX
endif # CXD56_LTE_SPI4
endif # CXD56_LTE_SPI5
endif # CXD56_LTE

View file

@ -43,7 +43,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_LIBM=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
@ -69,6 +68,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -26,7 +26,6 @@ CONFIG_CXD56_AUDIO=y
CONFIG_CXD56_BINARY=y
CONFIG_CXD56_I2C0=y
CONFIG_CXD56_I2C=y
CONFIG_CXD56_SDIO=y
CONFIG_CXD56_SPI4=y
CONFIG_CXD56_SPI5=y
CONFIG_CXD56_SPI=y
@ -42,7 +41,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_LIBM=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
@ -68,6 +66,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -67,6 +67,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -30,7 +30,6 @@ CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_ROMFS=y
CONFIG_HAVE_CXX=y
CONFIG_I2C=y
CONFIG_LIB_BOARDCTL=y
CONFIG_LIB_ENVPATH=y
CONFIG_MAX_TASKS=16

View file

@ -26,7 +26,6 @@ CONFIG_CXD56_CISIF=y
CONFIG_CXD56_I2C0=y
CONFIG_CXD56_I2C2=y
CONFIG_CXD56_I2C=y
CONFIG_CXD56_SDIO=y
CONFIG_CXD56_SPI4=y
CONFIG_CXD56_SPI5=y
CONFIG_CXD56_SPI=y
@ -68,6 +67,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -55,7 +55,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_LCD=y
CONFIG_LCD_ILI9340=y
CONFIG_LCD_ILI9340_IFACE0=y
@ -87,6 +86,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -46,7 +46,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_LCD=y
CONFIG_LCD_ILI9340=y
CONFIG_LCD_ILI9340_IFACE0=y
@ -75,6 +74,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -40,7 +40,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD=y
@ -67,6 +66,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -30,7 +30,6 @@ CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_ROMFS=y
CONFIG_HAVE_CXX=y
CONFIG_I2C=y
CONFIG_LIBC_EXECFUNCS=y
CONFIG_LIB_BOARDCTL=y
CONFIG_LIB_ENVPATH=y

View file

@ -52,7 +52,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD=y
@ -77,6 +76,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -30,7 +30,6 @@ CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_REGISTER=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_NFILE_DESCRIPTORS=8

View file

@ -34,7 +34,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_ROMFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_LIBC_EXECFUNCS=y
CONFIG_LIB_BOARDCTL=y
CONFIG_LIB_ENVPATH=y

View file

@ -114,6 +114,7 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RNDIS=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y

View file

@ -31,7 +31,6 @@ CONFIG_FS_PROCFS=y
CONFIG_FS_PROCFS_REGISTER=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_NFILE_DESCRIPTORS=8

View file

@ -47,7 +47,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD=y
@ -72,6 +71,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -40,7 +40,6 @@ CONFIG_FS_PROCFS_REGISTER=y
CONFIG_FS_SMARTFS=y
CONFIG_HAVE_CXX=y
CONFIG_HAVE_CXXINITIALIZE=y
CONFIG_I2C=y
CONFIG_MAX_TASKS=16
CONFIG_MAX_WDOGPARMS=2
CONFIG_MMCSD=y
@ -65,6 +64,8 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_RTC_DRIVER=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORK=y
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y
CONFIG_SMARTFS_ALIGNED_ACCESS=y

View file

@ -41,7 +41,6 @@ CONFIG_EXAMPLES_FTPC=y
CONFIG_EXAMPLES_FTPD=y
CONFIG_EXAMPLES_HELLO=m
CONFIG_EXAMPLES_TCPBLASTER=y
CONFIG_EXAMPLES_TCPBLASTER_GROUPSIZE=500
CONFIG_EXAMPLES_TCPBLASTER_SENDSIZE=1400
CONFIG_EXAMPLES_TCPBLASTER_SERVER=y
CONFIG_EXAMPLES_TCPBLASTER_SERVERIP=0xc0a80a10
@ -115,6 +114,7 @@ CONFIG_RAM_START=0x0d000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RR_INTERVAL=200
CONFIG_RTC=y
CONFIG_SCHED_HPWORK=y
CONFIG_SCHED_LPWORKPRIORITY=60
CONFIG_SCHED_WAITPID=y
CONFIG_SDCLONE_DISABLE=y

View file

@ -52,6 +52,7 @@
#include "cxd56_charger.h"
#include "cxd56_gs2200m.h"
#include "cxd56_i2cdev.h"
#include "cxd56_spidev.h"
#include "cxd56_sdcard.h"
#include "cxd56_wdt.h"
#include "cxd56_gpioif.h"
@ -61,12 +62,15 @@
#include "cxd56_ak09912.h"
#include "cxd56_apds9930.h"
#include "cxd56_apds9960.h"
#include "cxd56_bcm20706.h"
#include "cxd56_bh1721fvc.h"
#include "cxd56_bh1745nuc.h"
#include "cxd56_bm1383glv.h"
#include "cxd56_bm1422gmv.h"
#include "cxd56_bmi160.h"
#include "cxd56_bmp280.h"
#include "cxd56_emmcdev.h"
#include "cxd56_spisd.h"
#include "cxd56_kx022.h"
#include "cxd56_lt1pa01.h"
#include "cxd56_rpr0521rs.h"
@ -184,7 +188,7 @@ enum board_power_device
POWER_AUDIO_AVDD = PMIC_GPO(1),
POWER_AUDIO_MUTE = PMIC_GPO(6),
POWER_IMAGE_SENSOR = PMIC_GPO(4) | PMIC_GPO(5) | PMIC_GPO(7),
POWER_IMAGE_SENSOR = PMIC_GPO(4),
POWER_BTBLE = PMIC_NONE,
POWER_SENSOR = PMIC_NONE,
@ -192,6 +196,11 @@ enum board_power_device
POWER_LTE = PMIC_GPO(2),
};
/* Power Off Level definitions **********************************************/
#define BOARD_POWEROFF_DEEP (0)
#define BOARD_POWEROFF_COLD (1)
/* CXD5247 audio control definitions ****************************************/
#define CXD5247_XRST PIN_SPI3_CS2_X

View file

@ -0,0 +1,126 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_bcm20706.h
*
* Copyright 2019 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __BSP_BOARD_COMMON_INCLUDE_CXD56_BCM20706_H
#define __BSP_BOARD_COMMON_INCLUDE_CXD56_BCM20706_H
/****************************************************************************
* Included Files
****************************************************************************/
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/****************************************************************************
* Public Data
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
#ifdef CONFIG_BCM20706
/****************************************************************************
* Name: board_bluetooth_pin_cfg
*
* Description:
* Initialize bcm20707 control pins, it must be called before any operation
* to do power control, wake up and reset.
*
****************************************************************************/
int board_bluetooth_pin_cfg(void);
/****************************************************************************
* Name: board_bluetooth_uart_pin_cfg
*
* Description:
* Setup UART pin configuration for bcm20706.
*
****************************************************************************/
int board_bluetooth_uart_pin_cfg(void);
/****************************************************************************
* Name: board_bluetooth_reset
*
* Description:
* Reset bcm20707 chip
*
****************************************************************************/
void board_bluetooth_reset(void);
/****************************************************************************
* Name: board_bluetooth_power_control
*
* Description:
* Power on/off bcm20707 chip
*
****************************************************************************/
int board_bluetooth_power_control(bool en);
/****************************************************************************
* Name: board_bluetooth_enable_sleep
*
* Description:
* Enable/disable bcm20707 enters sleep mode
*
****************************************************************************/
void board_bluetooth_enable_sleep(bool en);
#endif /* CONFIG_BCM20706 */
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BSP_BOARD_COMMON_INCLUDE_CXD56_BCM20706_H */

View file

@ -0,0 +1,86 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_emmcdev.h
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_EMMCDEV_H
#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_EMMCDEV_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/****************************************************************************
* Public Data
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: board_emmc_initialize
*
* Description:
* Initialize the eMMC device and mount the file system.
*
****************************************************************************/
#ifdef CONFIG_CXD56_EMMC
int board_emmc_initialize(void);
#endif
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_EMMCDEV_H */

View file

@ -133,6 +133,24 @@ int board_power_setup(int status);
int board_power_control(int target, bool en);
/****************************************************************************
* Name: board_power_control_tristate
*
* Description:
* Power on/off/HiZ the device on the board.
* (HiZ is available only for PMIC_TYPE_GPO.)
*
* Input Parameter:
* target : PMIC channel
* value : 1 (ON), 0 (OFF), -1(HiZ)
*
* Returned Value:
* 0 on success, else a negative error code
*
****************************************************************************/
int board_power_control_tristate(int target, int value);
/****************************************************************************
* Name: board_power_monitor
*
@ -143,6 +161,22 @@ int board_power_control(int target, bool en);
bool board_power_monitor(int target);
/****************************************************************************
* Name: board_power_monitor_tristate
*
* Description:
* Get status of Power on/off/HiZ the device on the board.
*
* Input Parameter:
* target : PMIC channel
*
* Returned Value:
* 1 (ON), 0 (OFF), -1(HiZ)
*
****************************************************************************/
int board_power_monitor_tristate(int target);
/****************************************************************************
* Name: board_flash_power_control
*

View file

@ -0,0 +1,84 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_spidev.h
*
* Copyright 2020 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPIDEV_H
#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPIDEV_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/****************************************************************************
* Public Data
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: board_spidev_initialize
*
* Description:
* Initialize spi driver and register the /dev/spi device.
*
****************************************************************************/
int board_spidev_initialize(int bus);
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPIDEV_H */

View file

@ -0,0 +1,98 @@
/****************************************************************************
* boards/arm/cxd56xx/spresense/include/cxd56_spisd.h
*
* Copyright 2018 Sony Semiconductor Solutions Corporation
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name of Sony Semiconductor Solutions Corporation nor
* the names of its contributors may be used to endorse or promote
* products derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
****************************************************************************/
#ifndef __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPISD_H
#define __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPISD_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
/****************************************************************************
* Public Types
****************************************************************************/
#ifndef __ASSEMBLY__
/****************************************************************************
* Public Data
****************************************************************************/
#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* Name: board_spisd_initialize
*
* Description:
* Initialize the SPI-based SD card.
*
****************************************************************************/
#ifdef CONFIG_CXD56_SPISD
int board_spisd_initialize(int minor, int bus);
#endif
/****************************************************************************
* Name: board_spisd_status
*
* Description:
* Get the status whether SD Card is present or not.
*
****************************************************************************/
#ifdef CONFIG_CXD56_SPISD
uint8_t board_spisd_status(FAR struct spi_dev_s *dev, uint32_t devid);
#endif
#undef EXTERN
#if defined(__cplusplus)
}
#endif
#endif /* __ASSEMBLY__ */
#endif /* __BOARDS_ARM_CXD56XX_SPRESENSE_INCLUDE_CXD56_SPISD_H */

View file

@ -117,3 +117,11 @@ ifeq ($(CONFIG_CYGWIN_WINTOOL),y)
else
LDFLAGS += -Map=$(TOPDIR)/nuttx.map --cref
endif
ifneq ($(CONFIG_ASMP_MEMSIZE),)
LDFLAGS += --defsym=__reserved_ramsize=$(CONFIG_ASMP_MEMSIZE)
endif
HOSTCC = gcc
HOSTCFLAGS = -Wall -Wstrict-prototypes -Wshadow -Wundef -g -pipe

Some files were not shown because too many files have changed in this diff Show more