2#include "../xenon_uart/xenon_uart.h"
9#define SMC_BASE 0xea001000
13 va_start(args, format);
15 vsprintf(tmp, format, args);
28 while (!(read32(
SMC_BASE + 0x84) & 4));
44 for (i = 0; i < 4; ++i)
75 uprintf(
"DVD cover state: %02x\n", msg[1]);
78 uprintf(
"unknown SMC bulk msg: %02x\n", msg[1]);
128 buf[3] = 0x80 | 0x70;
142 uprintf(
"xenon_smc_ana_write failed, addr=%02x, err=%d\n", addr, buf[1]);
157 buf[3] = 0x80 | 0x70;
165 uprintf(
"xenon_smc_ana_read failed, addr=%02x, err=%d\n", addr, buf[1]);
168 *
val = buf[4] | (buf[5] << 8) | (buf[6] << 16) | (buf[7] << 24);
185 uprintf(
"xenon_smc_i2c_ddc_lock failed, err=%d\n", buf[1]);
197 int tmp=(addr>=0x200)?0x3d:0x39;
198 int ddc=(addr>=0x1d0 && addr<=0x1f5);
201 buf[1] = (ddc)?0x21:0x20;
204 buf[6] = addr & 0xff;
212 uprintf(
"xenon_smc_i2c_write failed, addr=%04x, err=%d\n", addr, buf[1]);
224 int tmp=(addr>=0x200)?0x3d:0x39;
225 int ddc=(addr>=0x1d0 && addr<=0x1f5);
228 buf[1] = (ddc)?0x11:0x10;
230 buf[3] = buf[5] = tmp | 0x80;
231 buf[6] = addr & 0xff;
237 uprintf(
"xenon_smc_i2c_read failed, addr=%04x, err=%d\n", addr, buf[1]);
262 buf[1] = (
override ? 1 : 0) | (state ? 0 : 2);
270 uint8_t buf[16] = {0x82, 0x01};
276 uint8_t buf[16] = {0x82, 0x04, 0x30, 0x00};
282 uint8_t buf[16] = {0x8c, 0x01, 0x00,0,0,0,0,0,0,0,0,0,0,0,0,0};
294 for (i = 0; i < 4; ++i)
295 *
data++ = (buf[i * 2 + 1] | (buf[i * 2 + 2] << 8));
308 uint8_t buf[16] = {0x88, algorithm};
void lock(unsigned int *lock)
int xenon_smc_i2c_read(uint16_t addr, uint8_t *val)
void xenon_smc_set_power_led(int override, int state, int startanim)
void xenon_smc_send_message(const unsigned char *msg)
void xenon_smc_power_reboot(void)
void xenon_smc_set_fan_algorithm(int algorithm)
void xenon_smc_start_bootanim(void)
void xenon_smc_power_shutdown(void)
void uprintf(const char *format,...)
int xenon_smc_receive_message(unsigned char *msg)
void xenon_smc_set_led(int override, int value)
int xenon_smc_read_avpack(void)
int xenon_smc_receive_response(unsigned char *msg)
int xenon_smc_i2c_write(uint16_t addr, uint8_t val)
int xenon_smc_ana_write(uint8_t addr, uint32_t val)
int xenon_smc_ana_read(uint8_t addr, uint32_t *val)
int xenon_smc_i2c_ddc_lock(int lock)
void xenon_smc_query_sensors(uint16_t *data)
void xenon_smc_handle_bulk(unsigned char *msg)
void uart_puts(unsigned char *s)