FM radio for Philips HDD1630. Volume was very faint unless recording was enabled, so do that too.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19996 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Mark Arigo 2009-02-13 03:49:17 +00:00
parent 311595c60c
commit 802b57ccd7
8 changed files with 121 additions and 4 deletions

View file

@ -196,6 +196,29 @@ int i2c_readbyte(unsigned int dev_addr, int addr)
return (int)data;
}
int i2c_sendbytes(unsigned int addr, int len, const unsigned char *data)
{
int i, n;
mutex_lock(&i2c_mtx);
i = 0;
while (len > 0)
{
n = (len < 4) ? len : 4;
if (pp_i2c_send_bytes(addr, n, (unsigned char *)(data + i)) < 0)
break;
len -= n;
i += n;
}
mutex_unlock(&i2c_mtx);
return i;
}
int pp_i2c_send(unsigned int addr, int data0, int data1)
{
int retval;
@ -234,7 +257,14 @@ void i2c_init(void)
#if CONFIG_I2C == I2C_PP5020
outl(0x0, 0x600060a4);
#if defined(PHILIPS_HDD1630)
outl(inl(0x600060a4) | 0x20, 0x600060a4);
outl(inl(0x7000c020) | 0x3, 0x7000c020);
outl(0x55, 0x7000c02c);
outl(0x54, 0x7000c030);
#else
outl(0x80 | (0 << 8), 0x600060a4);
#endif
#elif CONFIG_I2C == I2C_PP5024
#if defined(SANSA_E200) || defined(PHILIPS_SA9200)
/* Sansa OF sets this to 0x20 first, communicates with the AS3514

View file

@ -0,0 +1,44 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id:$
*
* Copyright (C) 2009 by Mark Arigo
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "config.h"
#if (CONFIG_TUNER & TEA5767)
#include "i2c-pp.h"
#include "fmradio_i2c.h"
/* The TEA5767 uses 5 bytes, but the pp-i2c will only read/write 4 bytes
at a time. The tuner doesn't like it when the i2c resets to send the 5th
byte. So, we can only read/write the first 4 bytes. Luckily, on read,
the 5th byte is reserved and on write we only use that for the deemphasis
bit (which we'll have to ignore). This is what the OF appears to do too. */
int fmradio_i2c_write(unsigned char address, const unsigned char* buf, int count)
{
(void)count;
return i2c_sendbytes(address, 4, buf);
}
int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count)
{
(void)count;
return i2c_readbytes(address, -1, 4, buf);
}
#endif

View file

@ -39,6 +39,13 @@ void power_init(void)
/* charger inserted bit */
GPIOE_ENABLE |= 0x20;
GPIOE_INPUT_VAL |= 0x20;
#if CONFIG_TUNER
/* fm antenna? */
GPIOE_ENABLE |= 0x40;
GPIOE_OUTPUT_EN |= 0x40;
GPIOE_OUTPUT_VAL &= ~0x40; /* off */
#endif
}
unsigned int power_input_status(void)
@ -77,3 +84,15 @@ void power_off(void)
GPIOB_OUTPUT_VAL &= ~0x80;
GPIOB_OUTPUT_EN |= 0x80;
}
#if CONFIG_TUNER
bool tuner_power(bool status)
{
if (status)
GPIOE_OUTPUT_VAL |= 0x40;
else
GPIOE_OUTPUT_VAL &= ~0x40;
return status;
}
#endif