Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 181426
b: refs/heads/master
c: 6b26fce
h: refs/heads/master
v: v3
  • Loading branch information
Michael Krufky authored and Mauro Carvalho Chehab committed Feb 26, 2010
1 parent 78dd71e commit 8893eb9
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 10 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: c245c75c41b9693bcbd6c95e25af324188b4dce1
refs/heads/master: 6b26fcea513095cd8a86cb376ad5a9df2fa8fe14
81 changes: 72 additions & 9 deletions trunk/drivers/media/dvb/siano/smsdvb.c
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ static int smsdvb_onresponse(void *context, struct smscore_buffer_t *cb)
break;

case MSG_SMS_RF_TUNE_RES:
case MSG_SMS_ISDBT_TUNE_RES:
complete(&client->tune_done);
break;

Expand Down Expand Up @@ -413,8 +414,8 @@ static int smsdvb_get_tune_settings(struct dvb_frontend *fe,
return 0;
}

static int smsdvb_set_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
static int smsdvb_dvbt_set_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
{
struct smsdvb_client_t *client =
container_of(fe, struct smsdvb_client_t, frontend);
Expand Down Expand Up @@ -470,6 +471,75 @@ static int smsdvb_set_frontend(struct dvb_frontend *fe,
&client->tune_done);
}

static int smsdvb_isdbt_set_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep,
u32 SegmentNumber)
{
struct smsdvb_client_t *client =
container_of(fe, struct smsdvb_client_t, frontend);

struct {
struct SmsMsgHdr_ST Msg;
u32 Data[4];
} Msg;

Msg.Msg.msgSrcId = DVBT_BDA_CONTROL_MSG_ID;
Msg.Msg.msgDstId = HIF_TASK;
Msg.Msg.msgFlags = 0;
Msg.Msg.msgType = MSG_SMS_ISDBT_TUNE_REQ;
Msg.Msg.msgLength = sizeof(Msg);
Msg.Data[0] = fep->frequency;
Msg.Data[2] = 12000000;
Msg.Data[3] = SegmentNumber;

sms_debug("freq %d band %d seg %d\n",
fep->frequency, fep->u.ofdm.bandwidth, SegmentNumber);

switch (fep->u.ofdm.bandwidth) {
case BANDWIDTH_8_MHZ:
Msg.Data[1] = BW_ISDBT_3SEG;
break;
case BANDWIDTH_7_MHZ:
Msg.Data[1] = BW_ISDBT_3SEG;
break;
case BANDWIDTH_6_MHZ:
Msg.Data[1] = BW_ISDBT_1SEG;
break;
case BANDWIDTH_AUTO:
return -EOPNOTSUPP;
default:
return -EINVAL;
}

return smsdvb_sendrequest_and_wait(client, &Msg, sizeof(Msg),
&client->tune_done);
}

static int smsdvb_set_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
{
struct smsdvb_client_t *client =
container_of(fe, struct smsdvb_client_t, frontend);
struct smscore_device_t *coredev = client->coredev;

switch (smscore_get_device_mode(coredev)) {
case DEVICE_MODE_DVBT:
case DEVICE_MODE_DVBT_BDA:
return smsdvb_dvbt_set_frontend(fe, fep);
case DEVICE_MODE_ISDBT:
case DEVICE_MODE_ISDBT_BDA:
{
u32 segmentnum;
/* XXX: hack - use 4 lower bits in frequency for segment num */
segmentnum = fep->frequency & 0x0000000f;
fep->frequency &= ~0x0000000f;
return smsdvb_isdbt_set_frontend(fe, fep, segmentnum);
}
default:
return -EINVAL;
}
}

static int smsdvb_get_frontend(struct dvb_frontend *fe,
struct dvb_frontend_parameters *fep)
{
Expand Down Expand Up @@ -557,13 +627,6 @@ static int smsdvb_hotplug(struct smscore_device_t *coredev,
/* device removal handled by onremove callback */
if (!arrival)
return 0;

if (smscore_get_device_mode(coredev) != DEVICE_MODE_DVBT_BDA) {
sms_err("SMS Device mode is not set for "
"DVB operation.");
return 0;
}

client = kzalloc(sizeof(struct smsdvb_client_t), GFP_KERNEL);
if (!client) {
sms_err("kmalloc() failed");
Expand Down

0 comments on commit 8893eb9

Please sign in to comment.