At Wed, 16 Nov 2011 00:57:08 +0800, Wu Fengguang wrote:
+static void hda_eld_work(struct work_struct *work) +{
- struct hdmi_eld *eld = container_of(
container_of(work, struct delayed_work, work),
struct hdmi_eld, work);
Ugh, hardly to read. Slightly better to use to_delayed_work()?
struct hdmi_eld *eld = container_of(to_delayed_work(work), struct hdmi_eld, work);
- struct hdmi_spec_per_pin *per_pin =
container_of(eld, struct hdmi_spec_per_pin, sink_eld);
- struct hda_codec *codec = eld->codec;
- hdmi_present_sense(codec, per_pin->pin_nid, eld, false);
+}
static int hdmi_add_pin(struct hda_codec *codec, hda_nid_t pin_nid) { struct hdmi_spec *spec = codec->spec; @@ -1227,7 +1245,7 @@ static int generic_hdmi_build_jack(struc if (err < 0) return err;
- hdmi_present_sense(codec, per_pin->pin_nid, &per_pin->sink_eld);
- hdmi_present_sense(codec, per_pin->pin_nid, &per_pin->sink_eld, false);
...
Looking through the code, I wonder how about keeping work and codec pointer in struct hdmi_spec_per_pin instead of struct hdmi_eld. Then we don't need to expose it in hda_local.h, and changes would be slightly more compact.
hdmi_present_sense() can be modified to receive hdmi_sepc_per_pin* directly instead of individual nid and eld pointer.
thanks,
Takashi