All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: linuxppc-dev@ozlabs.org
Cc: Geert Uytterhoeven <Geert.Uytterhoeven@sonycom.com>,
	Paul Mackerras <paulus@samba.org>,
	James Simmons <jsimmons@infradead.org>,
	Linux Frame Buffer Device Development
	<linux-fbdev-devel@lists.sourceforge.net>
Subject: Re: [PATCH 1/9] ps3: AV Settings Driver
Date: Fri, 26 Jan 2007 05:13:23 +0100	[thread overview]
Message-ID: <200701260513.24010.arnd@arndb.de> (raw)
In-Reply-To: <Pine.LNX.4.62.0701251846460.24610@pademelon.sonytel.be>

On Thursday 25 January 2007 18:48, Geert Uytterhoeven wrote:
> +
> +#ifdef PS3AV_DEBUG
> +#define DPRINTK(fmt, args...) \
> +	do { printk("ps3av " fmt, ## args); } while (0)
> +#else
> +#define DPRINTK(fmt, args...) do { } while (0)
> +#endif

You should probably use the provided pr_debug or (better) dev_dbg
macros to do that now.

> +} video_mode_table[] = {
> +	{     0, }, /* auto */
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_480I,       A_N,  720,  480, 1, 60},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_480P,       A_N,  720,  480, 0, 60},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_720P_60HZ,  A_N, 1280,  720, 0, 60},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_1080I_60HZ, A_W, 1920, 1080, 1, 60},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_1080P_60HZ, A_W, 1920, 1080, 0, 60},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_576I,       A_N,  720,  576, 1, 50},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_576P,       A_N,  720,  576, 0, 50},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_720P_50HZ,  A_N, 1280,  720, 0, 50},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_1080I_50HZ, A_W, 1920, 1080, 1, 50},
> +	{YUV444, XRGB, PS3AV_CMD_VIDEO_VID_1080P_50HZ, A_W, 1920, 1080, 0, 50},
> +	{  RGB8, XRGB, PS3AV_CMD_VIDEO_VID_WXGA,       A_W, 1280,  768, 0, 60},
> +	{  RGB8, XRGB, PS3AV_CMD_VIDEO_VID_SXGA,       A_N, 1280, 1024, 0, 60},
> +	{  RGB8, XRGB, PS3AV_CMD_VIDEO_VID_WUXGA,      A_W, 1920, 1200, 0, 60},
> +};

Is there a fundamental reason why 1280x768 is not supported as YUV? That is
the resolution that my TV set at home has natively, and I'd like to use it.

> +	if (down_interruptible(&ps3av.sem)) {
> +		printk(KERN_ERR "%s:sem failed cid:%x \n", __FUNCTION__, cid);
> +		return -ERESTARTSYS;
> +	}

This should not normally be considered an error, since a user can
trigger it easily.

> +
> +	table = ps3av_search_cmd_table(cid, PS3AV_CID_MASK);
> +	if (table == NULL) {
> +		printk(KERN_ERR "%s: invalid_cid:%x\n", __FUNCTION__, cid);
> +		res = -EINVAL;
> +		goto err;
> +	}
> +
> +	if (send_len < PS3AV_HDR_SIZE) {
> +		printk(KERN_ERR "%s: invalid send_len:%d\n", __FUNCTION__,
> +		       send_len);
> +		goto err;
> +	}
> +

What's the point in these checks? All callers of your function seem to be
from kernel space, so it can't really trigger here unless there is a bug
in the model.
I guess it could either be a BUG_ON() if you want to verify the validity
of your code, or you should leave out ps3av_search_cmd_table() entirely.

> +	msleep(100);
> +
> +	/* video mute on */
> +	for (i = 0; i < num_of_av_port; i++) {
> +		res = ps3av_cmd_av_video_disable_sig(ps3av.av_port[i]);
> +		if (res < 0)
> +			return -1;
> +		if (i < num_of_hdmi_port) {
> +			res = ps3av_cmd_av_tv_mute(ps3av.av_port[i],
> +						   PS3AV_CMD_MUTE_OFF);
> +			if (res < 0)
> +				return -1;
> +		}
> +	}
> +	msleep(300);

400 ms total wait time is very noticeable to the user. Is it possible to
reduce that time?

> +
> +	msleep(1500);
> +	/* av video mute */
> +	ps3av_set_av_video_mute(PS3AV_CMD_MUTE_OFF);

This is an even longer time to wait for. What about this one?

> +#ifdef PS3AV_DEBUG
> +	ps3av_cmd_av_hw_conf_dump(&ps3av->av_hw_conf);
> +#endif

It would be better to avoid this ifdef by defining an empty function
in the header file if PS3AV_DEBUG is not set.

> +	/* set videomode */
> +	old_id = atomic_read(&ps3av.ps3av_mode);
> +	atomic_set(&ps3av.ps3av_mode, id);
> +	if (ps3av_set_videomode(id))
> +		atomic_set(&ps3av.ps3av_mode, old_id);

This is not really atomic at all. If you want the update to be
atomic here, you should probably try to use atomic_cmpxchg().
Otherwise a regular int inside of a mutex might be more appropriate.

> +EXPORT_SYMBOL(ps3av_set_video_mode);

Is it intentionally EXPORT_SYMBOL instead of EXPORT_SYMBOL_GPL?
Normally, we try to make all new symbols _GPL, though it is obviously
without your own judgment to decide on which you use.

> +
> +int ps3av_set_mode(u32 id, int boot)
> +{
> +	int res;
> +
> +	res = ps3av_set_video_mode(id, boot);
> +	if (res)
> +		return -1;
> +
> +	res = ps3av_set_audio_mode(PS3AV_CMD_AUDIO_NUM_OF_CH_2,
> +				   PS3AV_CMD_AUDIO_FS_48K,
> +				   PS3AV_CMD_AUDIO_WORD_BITS_16,
> +				   PS3AV_CMD_AUDIO_FORMAT_PCM,
> +				   PS3AV_CMD_AUDIO_SOURCE_SERIAL);
> +	if (res)
> +		return -1;
> +
> +	return 0;
> +}

Common convention would be to use -ESOMETHING instead of -1 as the return
code.

> +static u32 ps3av_cs_video2av_bitlen(int cs)
> +{
> +	u32 res = 0;
> +
> +	switch (cs) {
> +	case PS3AV_CMD_VIDEO_CS_RGB_8:
> +	case PS3AV_CMD_VIDEO_CS_YUV444_8:
> +	case PS3AV_CMD_VIDEO_CS_YUV422_8:
> +	case PS3AV_CMD_VIDEO_CS_XVYCC_8:
> +		res = PS3AV_CMD_AV_CS_8;
> +		break;
> +	case PS3AV_CMD_VIDEO_CS_RGB_10:
> +	case PS3AV_CMD_VIDEO_CS_YUV444_10:
> +	case PS3AV_CMD_VIDEO_CS_YUV422_10:
> +	case PS3AV_CMD_VIDEO_CS_XVYCC_10:
> +		res = PS3AV_CMD_AV_CS_10;
> +		break;
> +	case PS3AV_CMD_VIDEO_CS_RGB_12:
> +	case PS3AV_CMD_VIDEO_CS_YUV444_12:
> +	case PS3AV_CMD_VIDEO_CS_YUV422_12:
> +	case PS3AV_CMD_VIDEO_CS_XVYCC_12:
> +		res = PS3AV_CMD_AV_CS_12;
> +		break;
> +	default:
> +		res = PS3AV_CMD_AV_CS_8;
> +		break;
> +	}
> +	return res;
> +}
> +
> +static u32 ps3av_vid_video2av(int vid)
> +{
> +	u32 res = 0;
> +
> +	switch (vid) {
> +	case PS3AV_CMD_VIDEO_VID_480I:
> +		res = PS3AV_CMD_AV_VID_480I;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_480P:
> +		res = PS3AV_CMD_AV_VID_480P;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_576I:
> +		res = PS3AV_CMD_AV_VID_576I;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_576P:
> +		res = PS3AV_CMD_AV_VID_576P;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_1080I_60HZ:
> +		res = PS3AV_CMD_AV_VID_1080I_60HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_720P_60HZ:
> +		res = PS3AV_CMD_AV_VID_720P_60HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_1080P_60HZ:
> +		res = PS3AV_CMD_AV_VID_1080P_60HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_1080I_50HZ:
> +		res = PS3AV_CMD_AV_VID_1080I_50HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_720P_50HZ:
> +		res = PS3AV_CMD_AV_VID_720P_50HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_1080P_50HZ:
> +		res = PS3AV_CMD_AV_VID_1080P_50HZ;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_WXGA:
> +		res = PS3AV_CMD_AV_VID_WXGA;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_SXGA:
> +		res = PS3AV_CMD_AV_VID_SXGA;
> +		break;
> +	case PS3AV_CMD_VIDEO_VID_WUXGA:
> +		res = PS3AV_CMD_AV_VID_WUXGA;
> +		break;
> +	default:
> +		res = PS3AV_CMD_AV_VID_480P;
> +		break;
> +	}
> +	return res;
> +}

Maybe replace these with lookup tables for smaller code size?

> +static u8 ps3av_cnv_mclk(u32 fs)
> +{
> +	u8 mclk;
> +
> +	switch (fs) {
> +	case PS3AV_CMD_AUDIO_FS_44K:
> +		mclk = PS3AV_CMD_AV_MCLK_512;
> +		break;
> +	case PS3AV_CMD_AUDIO_FS_48K:
> +		mclk = PS3AV_CMD_AV_MCLK_512;
> +		break;
> +	case PS3AV_CMD_AUDIO_FS_88K:
> +		mclk = PS3AV_CMD_AV_MCLK_256;
> +		break;
> +	case PS3AV_CMD_AUDIO_FS_96K:
> +		mclk = PS3AV_CMD_AV_MCLK_256;
> +		break;
> +	case PS3AV_CMD_AUDIO_FS_176K:
> +		mclk = PS3AV_CMD_AV_MCLK_128;
> +		break;
> +	case PS3AV_CMD_AUDIO_FS_192K:
> +		mclk = PS3AV_CMD_AV_MCLK_128;
> +		break;
> +	default:
> +		printk(KERN_ERR "%s failed, fs:%x\n", __FUNCTION__, fs);
> +		mclk = 0;
> +		break;
> +	}
> +	return mclk;
> +}

Same here.

> +
> +static const u32 ps3av_ns_table[][5] = {
> +	/*   D1,    D2,    D3,    D4,    D5 */
> +	{  6272,  6272, 17836, 17836,  8918 },	/*  44K */
> +	{  6144,  6144, 11648, 11648,  5824 },	/*  48K */
> +	{ 12544, 12544, 35672, 35672, 17836 },	/*  88K */
> +	{ 12288, 12288, 23296, 23296, 11648 },	/*  96K */
> +	{ 25088, 25088, 71344, 71344, 35672 },	/* 176K */
> +	{ 24576, 24576, 46592, 46592, 23296 },	/* 192K */
> +};

When writing such a table, it's often clearer to use named indexes
instead of the comments, like

static const u32 ps3av_ns_table[][5] = {
				 /*   D1,    D2,    D3,    D4,    D5 */
	[PS3AV_CMD_AUDIO_FS_44K]  {  6272,  6272, 17836, 17836,  8918 },
	[PS3AV_CMD_AUDIO_FS_48K]  {  6144,  6144, 11648, 11648,  5824 },
	[PS3AV_CMD_AUDIO_FS_88K]  { 12544, 12544, 35672, 35672, 17836 },
	[PS3AV_CMD_AUDIO_FS_96K]  { 12288, 12288, 23296, 23296, 11648 },
	[PS3AV_CMD_AUDIO_FS_176K] { 25088, 25088, 71344, 71344, 35672 },
	[PS3AV_CMD_AUDIO_FS_192K] { 24576, 24576, 46592, 46592, 23296 },
};

> +/* event_bit */
> +#define PS3AV_CMD_EVENT_BIT_UNPLUGGED			(1 << 0)
> +#define PS3AV_CMD_EVENT_BIT_PLUGGED			(1 << 1)
> +#define PS3AV_CMD_EVENT_BIT_HDCP_DONE			(1 << 2)
> +#define PS3AV_CMD_EVENT_BIT_HDCP_FAIL			(1 << 3)
> +#define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH			(1 << 4)
> +#define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY		(1 << 5)

My personal taste is to write these as 

#define PS3AV_CMD_EVENT_BIT_UNPLUGGED			0x0001
#define PS3AV_CMD_EVENT_BIT_PLUGGED			0x0002
#define PS3AV_CMD_EVENT_BIT_HDCP_DONE			0x0004
#define PS3AV_CMD_EVENT_BIT_HDCP_FAIL			0x0008
#define PS3AV_CMD_EVENT_BIT_HDCP_REAUTH			0x0010
#define PS3AV_CMD_EVENT_BIT_HDCP_TOPOLOGY		0x0020

but just do whichever you prefer here.

> +/* for video module */
> +/* video_head */
> +#define PS3AV_CMD_VIDEO_HEAD_A				0x0000
> +#define PS3AV_CMD_VIDEO_HEAD_B				0x0001
> +/* video_cs_out video_cs_in */
> +#define PS3AV_CMD_VIDEO_CS_NONE				0x0000
> +#define PS3AV_CMD_VIDEO_CS_RGB_8			0x0001
> +#define PS3AV_CMD_VIDEO_CS_YUV444_8			0x0002
> +#define PS3AV_CMD_VIDEO_CS_YUV422_8			0x0003
> +#define PS3AV_CMD_VIDEO_CS_XVYCC_8			0x0004
> +#define PS3AV_CMD_VIDEO_CS_RGB_10			0x0005
> +#define PS3AV_CMD_VIDEO_CS_YUV444_10			0x0006
> +#define PS3AV_CMD_VIDEO_CS_YUV422_10			0x0007
> +#define PS3AV_CMD_VIDEO_CS_XVYCC_10			0x0008
> +#define PS3AV_CMD_VIDEO_CS_RGB_12			0x0009
> +#define PS3AV_CMD_VIDEO_CS_YUV444_12			0x000a
> +#define PS3AV_CMD_VIDEO_CS_YUV422_12			0x000b
> +#define PS3AV_CMD_VIDEO_CS_XVYCC_12			0x000c
> +/* video_vid */
> +#define PS3AV_CMD_VIDEO_VID_NONE			0x0000
> +#define PS3AV_CMD_VIDEO_VID_480I			0x0001
> +#define PS3AV_CMD_VIDEO_VID_576I			0x0003
> +#define PS3AV_CMD_VIDEO_VID_480P			0x0005
> +#define PS3AV_CMD_VIDEO_VID_576P			0x0006
> +#define PS3AV_CMD_VIDEO_VID_1080I_60HZ			0x0007
> +#define PS3AV_CMD_VIDEO_VID_1080I_50HZ			0x0008
> +#define PS3AV_CMD_VIDEO_VID_720P_60HZ			0x0009
> +#define PS3AV_CMD_VIDEO_VID_720P_50HZ			0x000a
> +#define PS3AV_CMD_VIDEO_VID_1080P_60HZ			0x000b
> +#define PS3AV_CMD_VIDEO_VID_1080P_50HZ			0x000c
> +#define PS3AV_CMD_VIDEO_VID_WXGA			0x000d
> +#define PS3AV_CMD_VIDEO_VID_SXGA			0x000e
> +#define PS3AV_CMD_VIDEO_VID_WUXGA			0x000f
> +#define PS3AV_CMD_VIDEO_VID_480I_A			0x0010
> +/* video_format */
> +#define PS3AV_CMD_VIDEO_FORMAT_BLACK			0x0000
> +#define PS3AV_CMD_VIDEO_FORMAT_ARGB_8BIT		0x0007
> +/* video_order */
> +#define PS3AV_CMD_VIDEO_ORDER_RGB			0x0000
> +#define PS3AV_CMD_VIDEO_ORDER_BGR			0x0001
> +/* video_fmt */
> +#define PS3AV_CMD_VIDEO_FMT_X8R8G8B8			0x0000
> +/* video_out_format */
> +#define PS3AV_CMD_VIDEO_OUT_FORMAT_RGB_12BIT		0x0000
> +/* video_sync */
> +#define PS3AV_CMD_VIDEO_SYNC_VSYNC			0x0001
> +#define PS3AV_CMD_VIDEO_SYNC_CSYNC			0x0004
> +#define PS3AV_CMD_VIDEO_SYNC_HSYNC			0x0010
> +
> +/* for audio module */
> +/* num_of_ch */
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_2			0x0000
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_3			0x0001
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_4			0x0002
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_5			0x0003
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_6			0x0004
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_7			0x0005
> +#define PS3AV_CMD_AUDIO_NUM_OF_CH_8			0x0006
> +/* audio_fs */
> +#define PS3AV_CMD_AUDIO_FS_32K				0x0001
> +#define PS3AV_CMD_AUDIO_FS_44K				0x0002
> +#define PS3AV_CMD_AUDIO_FS_48K				0x0003
> +#define PS3AV_CMD_AUDIO_FS_88K				0x0004
> +#define PS3AV_CMD_AUDIO_FS_96K				0x0005
> +#define PS3AV_CMD_AUDIO_FS_176K				0x0006
> +#define PS3AV_CMD_AUDIO_FS_192K				0x0007
> +/* audio_word_bits */
> +#define PS3AV_CMD_AUDIO_WORD_BITS_16			0x0001
> +#define PS3AV_CMD_AUDIO_WORD_BITS_20			0x0002
> +#define PS3AV_CMD_AUDIO_WORD_BITS_24			0x0003
> +/* audio_format */
> +#define PS3AV_CMD_AUDIO_FORMAT_PCM			0x0001
> +#define PS3AV_CMD_AUDIO_FORMAT_BITSTREAM		0x00ff
> +/* audio_source */
> +#define PS3AV_CMD_AUDIO_SOURCE_SERIAL			0x0000
> +#define PS3AV_CMD_AUDIO_SOURCE_SPDIF			0x0001
> +/* audio_swap */
> +#define PS3AV_CMD_AUDIO_SWAP_0				0x0000
> +#define PS3AV_CMD_AUDIO_SWAP_1				0x0000
> +/* audio_map */
> +#define PS3AV_CMD_AUDIO_MAP_OUTPUT_0			0x0000
> +#define PS3AV_CMD_AUDIO_MAP_OUTPUT_1			0x0001
> +#define PS3AV_CMD_AUDIO_MAP_OUTPUT_2			0x0002
> +#define PS3AV_CMD_AUDIO_MAP_OUTPUT_3			0x0003
> +/* audio_layout */
> +#define PS3AV_CMD_AUDIO_LAYOUT_2CH			0x0000
> +#define PS3AV_CMD_AUDIO_LAYOUT_6CH			0x000b	/* LREClr */
> +#define PS3AV_CMD_AUDIO_LAYOUT_8CH			0x001f	/* LREClrXY */
> +/* audio_downmix */
> +#define PS3AV_CMD_AUDIO_DOWNMIX_PERMITTED		0x0000
> +#define PS3AV_CMD_AUDIO_DOWNMIX_PROHIBITED		0x0001
> +
> +/* audio_port */
> +#define PS3AV_CMD_AUDIO_PORT_HDMI_0			( 1 << 0 )
> +#define PS3AV_CMD_AUDIO_PORT_HDMI_1			( 1 << 1 )
> +#define PS3AV_CMD_AUDIO_PORT_AVMULTI_0			( 1 << 10 )
> +#define PS3AV_CMD_AUDIO_PORT_SPDIF_0			( 1 << 20 )
> +#define PS3AV_CMD_AUDIO_PORT_SPDIF_1			( 1 << 21 )
> +
> +/* audio_ctrl_id */
> +#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_RESET		0x0000
> +#define PS3AV_CMD_AUDIO_CTRL_ID_DAC_DE_EMPHASIS		0x0001
> +#define PS3AV_CMD_AUDIO_CTRL_ID_AVCLK			0x0002
> +/* audio_ctrl_data[0] reset */
> +#define PS3AV_CMD_AUDIO_CTRL_RESET_NEGATE		0x0000
> +#define PS3AV_CMD_AUDIO_CTRL_RESET_ASSERT		0x0001
> +/* audio_ctrl_data[0] de-emphasis */
> +#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_OFF		0x0000
> +#define PS3AV_CMD_AUDIO_CTRL_DE_EMPHASIS_ON		0x0001
> +/* audio_ctrl_data[0] avclk */
> +#define PS3AV_CMD_AUDIO_CTRL_AVCLK_22			0x0000
> +#define PS3AV_CMD_AUDIO_CTRL_AVCLK_18			0x0001
> +
> +/* av_vid */
> +/* do not use these params directly, use vid_video2av */
> +#define PS3AV_CMD_AV_VID_480I				0x0000
> +#define PS3AV_CMD_AV_VID_480P				0x0001
> +#define PS3AV_CMD_AV_VID_720P_60HZ			0x0002
> +#define PS3AV_CMD_AV_VID_1080I_60HZ			0x0003
> +#define PS3AV_CMD_AV_VID_1080P_60HZ			0x0004
> +#define PS3AV_CMD_AV_VID_576I				0x0005
> +#define PS3AV_CMD_AV_VID_576P				0x0006
> +#define PS3AV_CMD_AV_VID_720P_50HZ			0x0007
> +#define PS3AV_CMD_AV_VID_1080I_50HZ			0x0008
> +#define PS3AV_CMD_AV_VID_1080P_50HZ			0x0009
> +#define PS3AV_CMD_AV_VID_WXGA				0x000a
> +#define PS3AV_CMD_AV_VID_SXGA				0x000b
> +#define PS3AV_CMD_AV_VID_WUXGA				0x000c
> +/* av_cs_out av_cs_in */
> +/* use cs_video2av() */
> +#define PS3AV_CMD_AV_CS_RGB_8				0x0000
> +#define PS3AV_CMD_AV_CS_YUV444_8			0x0001
> +#define PS3AV_CMD_AV_CS_YUV422_8			0x0002
> +#define PS3AV_CMD_AV_CS_XVYCC_8				0x0003
> +#define PS3AV_CMD_AV_CS_RGB_10				0x0004
> +#define PS3AV_CMD_AV_CS_YUV444_10			0x0005
> +#define PS3AV_CMD_AV_CS_YUV422_10			0x0006
> +#define PS3AV_CMD_AV_CS_XVYCC_10			0x0007
> +#define PS3AV_CMD_AV_CS_RGB_12				0x0008
> +#define PS3AV_CMD_AV_CS_YUV444_12			0x0009
> +#define PS3AV_CMD_AV_CS_YUV422_12			0x000a
> +#define PS3AV_CMD_AV_CS_XVYCC_12			0x000b
> +#define PS3AV_CMD_AV_CS_8				0x0000
> +#define PS3AV_CMD_AV_CS_10				0x0001
> +#define PS3AV_CMD_AV_CS_12				0x0002
> +/* dither */
> +#define PS3AV_CMD_AV_DITHER_OFF				0x0000
> +#define PS3AV_CMD_AV_DITHER_ON				0x0001
> +#define PS3AV_CMD_AV_DITHER_8BIT			0x0000
> +#define PS3AV_CMD_AV_DITHER_10BIT			0x0002
> +#define PS3AV_CMD_AV_DITHER_12BIT			0x0004
> +/* super_white */
> +#define PS3AV_CMD_AV_SUPER_WHITE_OFF			0x0000
> +#define PS3AV_CMD_AV_SUPER_WHITE_ON			0x0001
> +/* aspect */
> +#define PS3AV_CMD_AV_ASPECT_16_9			0x0000
> +#define PS3AV_CMD_AV_ASPECT_4_3				0x0001
> +/* video_cs_cnv() */
> +#define PS3AV_CMD_VIDEO_CS_RGB				0x0001
> +#define PS3AV_CMD_VIDEO_CS_YUV422			0x0002
> +#define PS3AV_CMD_VIDEO_CS_YUV444			0x0003
> +
> +/* for automode */
> +#define PS3AV_RESBIT_720x480P			0x0003	/* 0x0001 | 0x0002 */
> +#define PS3AV_RESBIT_720x576P			0x0003	/* 0x0001 | 0x0002 */
> +#define PS3AV_RESBIT_1280x720P			0x0004
> +#define PS3AV_RESBIT_1920x1080I			0x0008
> +#define PS3AV_RESBIT_1920x1080P			0x4000
> +#define PS3AV_RES_MASK_60			(PS3AV_RESBIT_720x480P \
> +						| PS3AV_RESBIT_1280x720P \
> +						| PS3AV_RESBIT_1920x1080I \
> +						| PS3AV_RESBIT_1920x1080P)
> +#define PS3AV_RES_MASK_50			(PS3AV_RESBIT_720x576P \
> +						| PS3AV_RESBIT_1280x720P \
> +						| PS3AV_RESBIT_1920x1080I \
> +						| PS3AV_RESBIT_1920x1080P)
> +
> +#define PS3AV_MONITOR_TYPE_HDMI			1	/* HDMI */
> +#define PS3AV_MONITOR_TYPE_DVI			2	/* DVI */
> +#define PS3AV_DEFAULT_HDMI_VID_REG_60		PS3AV_CMD_VIDEO_VID_480P
> +#define PS3AV_DEFAULT_AVMULTI_VID_REG_60	PS3AV_CMD_VIDEO_VID_480I
> +#define PS3AV_DEFAULT_HDMI_VID_REG_50		PS3AV_CMD_VIDEO_VID_576P
> +#define PS3AV_DEFAULT_AVMULTI_VID_REG_50	PS3AV_CMD_VIDEO_VID_576I
> +#define PS3AV_DEFAULT_DVI_VID			PS3AV_CMD_VIDEO_VID_480P
> +
> +#define PS3AV_REGION_60				0x01
> +#define PS3AV_REGION_50				0x02
> +#define PS3AV_REGION_RGB			0x10
> +
> +#define get_status(buf)				(((__u32 *)buf)[2])
> +#define PS3AV_HDR_SIZE				4	/* version + size */
> +
> +/* for video mode */
> +#define PS3AV_MODE_MASK				0x000F
> +#define PS3AV_MODE_HDCP_OFF			0x1000	/* Retail PS3 product doesn't support this */
> +#define PS3AV_MODE_DITHER			0x0800
> +#define PS3AV_MODE_FULL				0x0080
> +#define PS3AV_MODE_DVI				0x0040
> +#define PS3AV_MODE_RGB				0x0020
> +
> +#ifdef __KERNEL__

If the definitions below are kernel-only, does that mean you want everything above
to be exported to user space? Is that necessary?

> +struct ps3av {
> +	int available;
> +	struct semaphore sem;

The semaphore should most likely be a 'struct mutex' instead.

	Arnd <><

  parent reply	other threads:[~2007-01-26  4:13 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-01-25 17:46 [PATCH 0/9] ps3av/fb drivers for 2.6.21 Geert Uytterhoeven
2007-01-25 17:48 ` [PATCH 1/9] ps3: AV Settings Driver Geert Uytterhoeven
2007-01-25 17:48   ` Geert Uytterhoeven
2007-01-26  3:12   ` Christoph Hellwig
2007-01-29 14:10     ` Geert Uytterhoeven
2007-01-29 14:10       ` Geert Uytterhoeven
2007-01-29 16:15       ` Christoph Hellwig
2007-01-29 16:15         ` Christoph Hellwig
2007-01-29 19:24         ` Geoff Levand
2007-01-30 18:39         ` Segher Boessenkool
2007-01-30 19:39           ` Geert Uytterhoeven
2007-01-30 19:39             ` Geert Uytterhoeven
2007-01-31  8:45           ` Christoph Hellwig
2007-01-31  8:45             ` Christoph Hellwig
2007-01-26  4:13   ` Arnd Bergmann [this message]
2007-01-26 14:56     ` Geert Uytterhoeven
2007-01-26 14:56       ` Geert Uytterhoeven
2007-01-28 21:37       ` Benjamin Herrenschmidt
2007-01-28 21:37         ` Benjamin Herrenschmidt
2007-01-29 15:14     ` Geert Uytterhoeven
2007-01-29 15:14       ` Geert Uytterhoeven
2007-01-30  0:16       ` Arnd Bergmann
2007-01-30  0:16         ` Arnd Bergmann
2007-01-25 17:48 ` [PATCH 2/9] fbdev modedb: allow refresh rates for named video modes Geert Uytterhoeven
2007-01-25 17:48   ` Geert Uytterhoeven
2007-01-25 17:49 ` [PATCH 3/9] fbdev modedb: make more pointer parameters const Geert Uytterhoeven
2007-01-25 17:49   ` Geert Uytterhoeven
2007-01-25 17:49 ` [PATCH 4/9] fb_videomode_to_var: reset virtual screen parameters Geert Uytterhoeven
2007-01-25 17:49   ` Geert Uytterhoeven
2007-01-25 17:50 ` [PATCH 5/9] ps3: Preallocate bootmem memory for ps3fb Geert Uytterhoeven
2007-01-25 17:50   ` Geert Uytterhoeven
2007-01-30  2:29   ` Michael Ellerman
2007-01-30  2:29     ` Michael Ellerman
2007-01-30  8:16     ` Geert Uytterhoeven
2007-01-30  8:16       ` Geert Uytterhoeven
2007-01-30  8:27       ` Arnd Bergmann
2007-01-30  8:27         ` Arnd Bergmann
2007-01-30  8:36         ` Geert Uytterhoeven
2007-01-30  8:36           ` Geert Uytterhoeven
2007-01-30  9:08           ` Benjamin Herrenschmidt
2007-01-30  9:08             ` Benjamin Herrenschmidt
2007-01-30 10:44             ` Arnd Bergmann
2007-01-30 10:44               ` Arnd Bergmann
2007-01-30 22:37       ` Michael Ellerman
2007-01-30 22:37         ` Michael Ellerman
2007-01-25 17:50 ` [PATCH 6/9] ps3: Virtual Frame Buffer Driver Geert Uytterhoeven
2007-01-25 17:50   ` Geert Uytterhoeven
2007-01-25 21:36   ` [Linux-fbdev-devel] " Bernhard Fischer
2007-01-25 17:51 ` [PATCH 7/9] ps3: disable display flipping during mode changes Geert Uytterhoeven
2007-01-25 17:51   ` Geert Uytterhoeven
2007-01-26  2:13   ` Arnd Bergmann
2007-01-25 17:51 ` [PATCH 8/9] ps3: cleanup ps3fb before clearing HPTE Geert Uytterhoeven
2007-01-25 17:51   ` Geert Uytterhoeven
2007-01-26  3:14   ` Christoph Hellwig
2007-01-30  2:23     ` Michael Ellerman
2007-01-30  2:23       ` Michael Ellerman
2007-03-24 23:46     ` Geoff Levand
2007-03-25 17:43       ` Milton Miller
2007-03-27  1:06         ` Geoff Levand
2007-03-27 17:35       ` Christoph Hellwig
2007-01-25 17:52 ` [PATCH 9/9] ps3: ps3av/fb defconfig updates Geert Uytterhoeven
2007-01-25 17:52   ` Geert Uytterhoeven
2007-01-25 17:55 ` [PATCH 0/9] ps3av/fb drivers for 2.6.21 Geert Uytterhoeven
2007-01-25 17:55   ` Geert Uytterhoeven

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200701260513.24010.arnd@arndb.de \
    --to=arnd@arndb.de \
    --cc=Geert.Uytterhoeven@sonycom.com \
    --cc=jsimmons@infradead.org \
    --cc=linux-fbdev-devel@lists.sourceforge.net \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=paulus@samba.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.