mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
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:
parent
311595c60c
commit
802b57ccd7
8 changed files with 121 additions and 4 deletions
|
|
@ -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
|
||||
|
|
|
|||
44
firmware/target/arm/philips/hdd1630/fmradio_i2c-hdd1630.c
Normal file
44
firmware/target/arm/philips/hdd1630/fmradio_i2c-hdd1630.c
Normal 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
|
||||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue